权限管理基础

2018年02月20日 16:51 | 6941次浏览

一、前言

什么权限管理,我认为大概包括用户认证与用户授权。只要用用户的系统,都会存在权限管理。

二、权限管理基础

2.1用户认证

首先不管你做没有做过权限管理,如下图你也是熟悉的。

这个图的流程很简单,很直观的看到权限认证的流程走向。那么上图中存在哪些关键的东西,我们来总结一下。

subject:主体       就是系统用户,这个用户可以是真正的人,也可以是程序。上图为登录用户(主人)。

principal:身份信息      就是主体的身份标志,身份信息是一对多关系。上图你可以是群主,也是尊贵的QQ会员(身份体现)。

credential:凭证信息    只要主体知道,或者主体提供的信息。例如我们的身份证凭证。上图为登录密码(身份证硬件)。

2.2用户授权

如图为用户授权流程,简单明了。

看图说话:用户认证通过之后,接下来就是主体subject访问资源resource的时候,这个时候就需要验证权限身份principal。如果拥有凭证credential就可以访问。注意到多一个红色词语,就是资源resource,授权就是对资源进行授权的过程。

如果硬要按照语文课的六要素的话可以划分如下:谁+做+什么


who:主体subject。主体需要访问系统中的资源 -----------谁


what:资源resource。如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为t01的商品为资源实例,编号为

  001的商品信息也属于资源实例 ----------什么


how:许可permission 规定了主体对资源的操作许可,权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号为001用户的修改权限等,通过

 权限可知主体对哪些资源都有哪些操作许可。权限分为粗颗粒和细颗粒,粗颗粒权限是指对资源类型的权限,细颗粒权限是对资源实例的权限。

-----------做

如图为资源类型与资源实例权限。仔细品味

三、简易权限模型

简易模式包括:

1、主体:(账户、密码)

2、资源:(资源名称、资源访问地址)

3、权限:(权限名称、资源id)

4、角色:(角色名称)

5、角色权限关系:(角色id、权限id)

6、主体角色关系:(主体id、角色id)

可以建立如下数据表搭建模型:

或者:

2、3合并为资源权限:

权限(权限名称、资源名称、资源访问地址)

四、权限控制

了解了用户认证、用户授权、权限模型之后,我们来看看权限控制,就是我们上面我们看到的判断。

4.1基于角色控制权限

RBAC基于角色的访问控制(Role-Based Access Control)是以角色为中心进行访问控制

例如:

if(主体.hasRole("总经理角色id")){

查询工资

}

缺陷:如果懂事长秘书也有查询工资的权限呢??如下

if(主体.hasRole("总经理角色id")||主体.hasRole("懂事长秘书角色id")){

查询工资

}

所有这种我们一般不建议!!!

4.2基于资源控制权限

RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制

例如:

if(主体.hasPermission("查询工资权限标识")){

查询工资

}

优点:系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化为总经理和部门经理也只需要将“查询工资信息权限”添加到“部门经理角色”的权限列表中,判断逻辑不用修改,系统可扩展性强。


五、总结

这一篇我注意讲解了,一些基础模型,即使你用任何权限工具或者自己写权限框架也可以用到。接下来,就权限解决方案等一系列方式,我采用shrio框架


----摘录自ycy蓝马博客



小说《我是全球混乱的源头》

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程