数据库篇(数据库设计) ---权限系统设计

本文深入解析权限管理系统设计,涵盖菜单功能权限与数据权限控制两大核心。详述用户-权限、用户-角色-权限及用户-用户组-角色-权限模型,探讨数据隔离策略,为系统安全提供全面指导。

目录

概述

菜单功能权限控制

用户-权限

用户-角色-权限

 用户-用户组-角色-权限

数据权限控制


概述

    权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。

    权限管理几乎出现在任何系统里面,只要有用户和密码的系统。 很多人常将“用户身份认证”、“密码加密”、“系统管理”等

    概念与权限管理概念混淆。一个(ERP)系统中没有权限进行管理,就像躯体没有了灵魂,没有任何控制,行尸走肉一

    般,无论功能设计的多么完美,白搭。

    依据我现有的浅薄认知,我认为权限从控制作用上来划分成两类:

  1. 菜单功能权限控制
  2. 数据权限控制

菜单功能权限控制

    声明一下:菜单功能权限控制不单单是对菜单的展示和控制,还包括菜单页面上的功能控制,细分到每一个按钮链接操作,

    有些人只有查看权限,有些人可以修改,具体不同的人员可以查看到不同的数据,就交由数据权限控制。

    说起菜单权限,RBAC是目前最-最-最为广泛接受的权限模型。我们从简单的开始说起。

用户-权限

    每个用户和每个权限进行多对多的关联

    数据库:人员表-人员权限关联表-权限表
    这种设计比较简单,一般不用。

用户-角色-权限

    当我们需要管理很多权限的时候,有些权限可以分成组以功能模块进行赋权限。这个时候角色就是一些权限的集合。

    比如机构管理的增删改可以放到一个角色中,只需要将改角色和某个人关联就能把增删改都赋予这个人。

    在这个模型中,我们把权限赋予角色,再把角色赋予用户。用户和角色,角色和权限都是多对多的关系。

    用户拥有的权限等于他所有的角色持有权限之和。

     数据库表设计:

 用户-用户组-角色-权限

    当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,

    每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户

    个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系)

     数据库设计:

     这个时候发现,我用户没有和权限进行关联,为什么不关联呢?不是不可以,是根据业务场景来,基本上一个

     用户所拥有的权限来源于他的职责范围,而职责范围是一个权限的集合,而且,业务系统中这种场景不多,并且

     可以通过再次新建一个角色进行关联单独解决。如果有业务需要,增加一个用户-权限表就可以了。

数据权限控制

    当我们查询敏感数据时候,每个人对某个表都有查询权限,但是部门人员只能查询本部门的数据,但是总部可以

    查询所有的,这个时候就要涉及到数据权限隔离。

    首先,人员或者组我们可以使用以上功能权限的表格数据,对不同的功能数据类型进行不同的控制,这个时候需要

    一张功能表,一张组/用户-数据表(通过标识区分用户或者租),用来记录数据权限。

     其中数据类型可以存放到字典中,主要是功能的一个唯一标识。大体上我们可以分为4个主要对象:

     用户,关联表,系统数据,功能。

 

    数据来源是系统中各个表格的待查询类型数据。例如我们查询个人工资数据,每个人只能查询自己的,这个可以

    做名称条件限制,但是各个部门人力资源需要知道部门内人员的薪资数据,总公司可以查询到全部的数据。我们

    可以将薪资数据查询作为一个功能类型-01(薪资查询)存放到字典中,然后将部门作为另一个类型从系统中部门

    表读取,并根据不同的部门分配不同的部门数据(如果还需要根据其他其他类型做区分,只需要增加组/用户-数据

    表字段就可以了,例如只能看到某一职级人员,不能看到老总那个职级的数据,就可以把职级也添加成一个条件)。

 

建议组/用户-数据表的设计.(id,用户或者组id,用户或者组标识,数据类型(例如:部门),功能类型(01-薪资查询),扩展1(职级数据),….)

1、 抽象——总体思路。 先看这个ER图。 很简单,就是说明一下人员和资源的关系,一个人可以使用多个资源,一个资源可以被多个人使用,就是多对多的关系了。 不知道这个是不是可以叫做“抽象”。这个就是在金字塔的顶端来看权限了,站在顶端来看,就这么一点,估计没有那种情况可以逃出这个描述吧。 资源:这里指的资源是广义上的资源,包括很多的东东,模块、数据,菜单、节点、按钮、控件,表、字段、存储过程,页面、窗口、表单、图表、报表,什么都可以算作是一种资源。您也可以把您遇到的一些情况都来算作是一种资源。关于资源先说这些,下面还有详细的说明。 2、 加入权限 第一个图也太简单了,我们把他详细一下,把人员分成两个表——人员基本信息和登录信息,在加入“权限”。就是下面这个表了。 人员分成两个表可以应对很多的情况,比如一个人可以有多个登录帐号,人员基本信息还可以和其他的表相关联,登录方面的需求有什么变化的话,只需要修改登录信息表就可以了,不会影响人员基本信息表,不会让其越来越臃肿。 以前对于“权限”是很模糊的,似有似无的感觉,现在看来他其实就是一个多对多的关联表,呵呵。当然您可以说我的这个看法不对,呵呵,我只是说一下我的感觉。 3、 加入角色 第二个图,是把帐号的资源直接联系起来,这个有一个不方便的地方,比如有五个业务员他们的功能都是一样的,但是我们却需要做五遍一样的操作才能给这五个业务员设置好权限,而当业务员可以做的事情有变化的时候,我就又需要做五次相同的操作,这个就很麻烦了,所以引用了“角色”。 我们可以建立一个业务员角色,设置业务员角色可以做的事情,然后把五个业务员和业务员角色关联起来。这样就方便了,业务员可以做得事情有变化的时候,我只需要修改业务员角色可以做得事情就可以了。 您可能会问,客户的人少,每个人做得事情都不一样,这个怎么办呀? 这也好办呀,一个人一个角色就可以了。虽然对于这种情况多用了一个角色,有点绕远的感觉,但是总体来说是可以接受的。角色初期设置一下就可以了,角色和人员“绑定”之后,修改角色可以做什么事情,和修改人员可以做什么事情,操作步骤都是一样的。 您可能又问了,客户是一个很大的公司,设置了n个角色之后,客户提出了一个需求:张三这个人比较特殊,他可以做XX事情,但是有没有对应的角色,也不想再多设置一个角色了,需要直接给张三设置可以做这件事情就可以了。 这个又要怎么处理呢?是不是要修改表结构了呢?我是不想改的,还是用角色绑定的方法来处理,增加一个“张三专用角色”,这个角色是“隐藏”的,不和其他的角色一样的管理,需要通过对“张三”来管理。这个好像说不太清楚,先这样吧,呵呵。 4、 表关联图 我觉得ER图就是ER图,不能代替表关系图,所以我就又做了一个表关系图。 【图四】 左面从上往下看,人员、登录帐号、角色、资源,右面是两个多对多的关联表。这个看起来就比较清晰了吧。 这个设计还可以吧,资源保罗万象什么都可以往里放,您可以展开您的联想,帮想到的东东都放进去就可以了。 这个图从设计的角度来说应该是挺简洁的,五六个表就搞定了。而且也可以适合很大的范围,因为那个资源的定义实在是太广泛了,到了无所不包的程度了。但是这个设计真的好吗?或者是实用吗? .......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值