美文网首页权限管理架构Spring全家桶
2、用户权限管理,数据库表设计

2、用户权限管理,数据库表设计

作者: ltjxwxz | 来源:发表于2017-08-30 15:04 被阅读128次

    一、权限设计

    网上资料说权限设计 = 功能权限 + 数据权限,我认为还是很有道理的。之前项目中只涉及到功能权限,没有数据权限,原因是最开始设计时,数据已经绑定在特定的用户下了,而且涉及到的表数量很少,不需要单独考虑数据权限的问题。

    二、功能权限

    权限管理,最细致的权限管理有 用户,用户组,角色,权限,功能。根据不同的需求适当选择,如 用户量过大,每个人都授权和麻烦,就引入用户组,对用户组赋予权限。功能上也根据业务不同做适当的扩展。由于如用户权限之前存在多对多关系,需要引入中间表。
    本系统设计如下:

    Paste_Image.png

    数据量很小,功能也不复杂,所以只有用户,角色,权限(功能)及产生的中间表。
    表中的数据都是提前填的,用户登陆,查ermroleuser表,获取角色,查ermrolefunction表,获取功能,再查ermfunction表,返回该用户的功能的中文,在页面上展示。

    功能权限详细设计请参考,本项目也是受此启发:
    http://blog.csdn.net/painsonline/article/details/7183613/

    三、数据权限

    需求:给一个原来没有权限的数据配置系统加上登录,权限功能,不同角色查同一张表返回结果不同。
    思路:所谓数据权限,关注点在于实体属性值、条件、允许值,用户登录后,查询该用户的查询条件,根据条件获取数据即可。详细表结构设计可以参考:https://zhuanlan.zhihu.com/p/31339794

        CREATE TABLE `sys_acl_data` (
            `id` int(11) NOT NULL,
            `acl_id` int(11) NOT NULL COMMENT '对应权限表主键',
            `status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '状态,1:可用,0:不可用',
            `param` varchar(20) NOT NULL DEFAULT '' COMMENT '参数',
            `operation` int(11) NOT NULL DEFAULT 0 COMMENT '操作类型,0;等于,1:大于,2:小于,3:大于等于,4:小于等于,5:包含,6:介于之间,。。。',
            `value1` varchar(100) NOT NULL DEFAULT '0',
            `value2` varchar(100) NOT NULL DEFAULT '0',
            `next_param_op` int(11) NOT NULL DEFAULT 0 COMMENT '后续有参数时连接的关系,0:没有其他参数控制,1:与&&,2:或||',
            `seq` tinyint(4) NOT NULL DEFAULT '0' COMMENT '顺序',
            PRIMARY KEY (`id`),
            INDEX `idx_acl_id` USING BTREE (`acl_id`)
        ) ENGINE=`InnoDB` COMMENT '数据权限表';
    

    具体介绍一下每个字段含义:
    (1)主键 id;
    (2)acl_id 映射权限点表主键,代表每行记录是针对哪个权限点的;
    (3)status 代表当前这条配置是否有效,方便临时激活与禁用;
    (4)param 代表需要校验的参数名,允许一个请求有多个参数参与数据校验;如果参数复杂,比如包含对象,定义的参数可能为a.b.c 这种多级的形式,建议不要太复杂
    (5)operation 代表数据拦截的规则,使用数字代表是等于、大于、小于、大于等于、小于等于、包含、介于之间等,可以根据自己需要增加或减少支持的拦截规则
    (6)value1 和 value2 用来和param、operation组成一个关系表达式,比如:1<=a<2
    next_param_op 字段根据需要使用,如果一个权限点支持多条数据规则时,连接两个规则之间的操作,|| 还是 &&
    (7)seq 字段用于某个权限点包含多条数据权限规则时的顺序


    image.png

    假设有这么一条数据,那么他的含义是:id为1(acl_id)的权限点,配置了一条有效(status=1)的数据规则,规则是:传入参数id(param)的值要大于(operation)10(value1)

    这种设计很细致了,当然我的项目没有那么复杂,所以最终没有采用这个。
    http://www.cnblogs.com/jeffwoot/archive/2008/12/23/1359591.html讲述了数据权限设计的演化过程。
    本系统跟权限相关的表结构如下:

    image.png

    相关文章

      网友评论

        本文标题:2、用户权限管理,数据库表设计

        本文链接:https://www.haomeiwen.com/subject/royvdxtx.html