首页 > 代码库 > 权限系统设计
权限系统设计
注意:此设计文档为初始设计,数据表保存内容及权限操作定义如果意见不同,可以商榷修改。
1. 用户权限系统设计的目的
为了限制高分林业系统不同示范区、不同子系统用户在系统中的访问,设计用户权限控制系统只给予其必须的功能模块的访问,以保证数据的安全可靠,不被非法访问和操作。
2. 用户权限系统设计
2.1 实体关系描述
权限系统中共有四类实体,分别为:用户、角色、模块、权限。
用户与角色之间是多对一的关系,一个用户只有一个角色,一个角色可以分配给多个用户。
角色与权限、模块与权限是双向多对多的关系,即:一个角色可以对应多个权限,一个权限也可以分配给多个角色;一个模块可对应多个操作权限,一个权限也可作用于多个模块。
2.2 数据表示设计
2.2.1 用户实体
用户实体表示如下所示:
其中,tb_user_role字段为角色表tb_role_id的引用,标识用户所属的角色。
各字段属性及简单描述如下:
2.2.2 角色实体
角色实体表示如下所示:
其中,tb_rols_id为用户角色表的主键,其它字段值类型及描述如下:
2.2.3 模块实体
高分林业应用平台,由各个不同的功能子系统组成,这里我们将不同的功能子系统抽象为模块,例如:高分林业平台提供各个不同部门使用的所有算法,该子功能即可抽象为算法模块,统一为平台用户服务。
此外,模块又分为子模块,为用户使用提供更加细粒度级的权限控制,例如:算法模块下包含近20的算法子模块,分别为:A算法、B算法....。
模块实体表将模块与子模块统一放在一张表中,利用tb_modules_parent来表示某个模块的父模块,其中,顶级模块tb_modules_parent字段值为0。
模块实体表示如下所示:
其中,tb_modules_id为模块实体表的主键,tb_modules_parent代表本条记录所代表的模块的父类模块。如果该模块已经是顶级模块,则该字段值为0,其它字段属性及描述如下所示:
2.2.4 角色-模块-权限实体
由于,角色、模块、权限实体之间是多地多的关系,因此这里采用一张表来表示三者之间的关系。角色-模块-权限实体表示如下所示:
各字段的属性值与描述如下所示:
3. 用户权限标识设计
3.1 权限标识的定义
在表tb_rols_permissions中,字段tb_permissions用于记录权限标识,在高分林业应用中,该字段采用十进制整数值表示该权限值。在项目开发中,该十进制整数值会被转换为八位的二进制字符串,其中字符串的每一位分别代表一种权限,即最多可以标识8中不同权限的组合,如下表所示:
二进制字符串每一位对应权限定义如下:
当角色拥有指定模块的上述权限时,其对应的二进制数的该位置的值为1,反之为0,例如:深林资源平台使用用户,对算法模块的高分深林资源数据去噪算法有使用权限,则其二进制标识位为:10000000,如果荒漠化平台使用使用对算法模块的高分深林资源数据去噪算法没有使用权限,则其二进制标识位为:00000000,代表它无权查看。
表格中,各权限位代表的具体含义可以具体商定,如果权限类别不足8种则多余位可预留用作将来的扩展。
3.2 权限标识和数据库权限值得转换
由于数据库中持久化的数据为十进制数,程序中使用的是转换后的二进制字符串,因次有必要提供一组函数进行他们之间的相互转换。
定义十进制整数与二进制字符串互相转换类,供平台统一使用。
4. 用户权限使用举例
4.1 案例需求描述
案例需求描述:“高分林业应用平台,算法模块共包含20中算法子模块,其中用于深林资源处理的算法有6种,用于荒漠化处理的算法有8中,还有其他等。现要求,深林资源平台用户与荒漠化平台用户在登录系统后,对算法模块均可见,但是深林资源平台用户只能看到并使用用于深林资源处理的算法子模块,荒漠化平台用户只能看到并使用用于荒漠化处理的算法子模块”。
4.2 数据表字段数据
按照上述权限系统的设计,表中存放记录应如下所示:
1. 用户实体表
tb_user_id | tb_user_name | tb_user_password | tb_user_email | tb_user_department | tb_user_role |
1 | 张小凡 | XXXXXX | ...@163.com | 23 | 6 |
2 | 林惊羽 | YYYYYY | ...@qq.com | 46 | 9 |
2. 角色表
tb_rols_id | tb_rols_name | tb_rols_desc | tb_rols_create_time | tb_rols_last_modify_time |
6 | 深林资源平台使用人员 | 高分林业平台上的深林资源使用人员 | 1389114915 | 1389116007 |
9 | 荒漠化平台使用人员 | 高分林业平台上的荒漠化使用人员 | 1394551296 | 1394551296 |
3. 模块表
tb_modules_id | tb_modules_name | tb_modules_desc | tb_modules_parent | tb_modules_status |
1 | 算法模块 | 父模块,高分林业平台算法服务模块 | 0 | 1 |
2 | 深林资源算法A | 算法模块中用于深林资源用户的算法 | 1 | 1 |
3 | ... | ... | ... | ... |
4 | 荒漠化算法C | 算法模块中用于荒漠化的算法 | 1 | 1 |
5 | ... | ... | ... | ... |
4. 角色-模块-权限表
tb_rols_id | tb_modules_id | tb_permissions |
6 | 1 | 128 |
9 | 1 | 128 |
6 | 2 | 128 |
6 | 4 | 0 |
9 | 2 | 0 |
9 | 4 | 128 |
... | ... | ... |
如上所示,6、9角色对1算法模块均具有128的权限,转换为10000000,即6、9角色对算法模块均可见,即深林资源平台使用人员和荒漠化平台使用人员登录上高分林业处理平台后对算法模块均可见。
6角色对2模块(深林资源算法A)具有128权限、对4模块(荒漠化算法C)具有0权限,则深林资源使用用户对深林资源算法A具有可见,但对荒漠化算法C不可见。
9角色对2模块(深林资源算法A)具有0权限,对4模块(荒漠化算法C)具有128权限,则荒漠化平台使用用户对深林资源算法A不可见,对荒漠化算法C可见。
权限系统设计