疯狂的小鸡

权限管理

字数统计: 1.2k阅读时长: 3 min
2018/11/30 Share

什么是权限管理

权限管理包括用户 身份认证 和 授权 两部分,简称认证授权。

对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。

认证授权

用户身份认证

身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是核对用户输入的用户名和口令。

关键对象:

  • Subject:主体
    访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体;

  • Principal:身份信息
    是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。

  • Credential:凭证信息
    是只有主体自己知道的安全信息,如密码、证书等。

用户授权

授权可简单理解为who对what(which)进行How操作:

  • Who,即主体(Subject),主体需要访问系统中的资源。

  • What,即资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为t01的商品为资源实例,编号为001的商品信息也属于资源实例。

  • How,权限/许可(Permission),规定了主体对资源的操作许可,权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号为001用户的修改权限等,通过权限可知主体对哪些资源都有哪些操作许可。

认证授权

粗颗粒度和细颗粒度

权限分为粗颗粒和细颗粒,对 资源类型 的管理称为粗颗粒度权限管理,即只控制到菜单、按钮、方法,粗粒度的例子比如:用户具有用户管理的权限,具有导出订单明细的权限。对 资源实例 的控制称为细颗粒度权限管理,即控制到数据级别的权限,比如:用户只允许修改本部门的员工信息,用户只允许导出自己创建的订单明细。

如何实现粗颗粒度和细颗粒度

对于 粗颗粒度 的权限管理可以很容易做系统架构级别的功能,即系统功能操作使用统一的粗颗粒度的权限管理。

对于 细颗粒度 的权限管理不建议做成系统架构级别的功能,因为对数据级别的控制是系统的业务需求,随着业务需求的变更业务功能变化的可能性很大,建议对数据级别的权限控制在 业务层个性化 开发,比如:用户只允许修改自己创建的商品信息可以 在service接口添加校验 实现,service接口需要传入当前操作人的标识,与商品信息创建人标识对比,不一致则不允许修改商品信息。

权限模型

认证授权

通常企业开发中将资源和权限表合并为一张权限表,如下:
资源(资源名称、访问地址)
权限(权限名称、资源id)

合并为:
权限(权限名称、资源名称、资源访问地址)

权限控制

基于角色色的访问控制

基于角色的访问控制(Role-Based Access Control)是以角色为中心进行访问控制,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等。

缺点:以角色进行访问控制粒度较粗,如果上图中查询工资所需要的角色变化为总经理和部门经理,此时就需要修改判断逻辑为“判断主体的角色是否是总经理或部门经理”,系统可扩展性差。

基于资源的访问控制

基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制,比如:主体必须具有查询工资权限才可以查询员工工资信息等。

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

CATALOG
  1. 1. 什么是权限管理
  2. 2. 用户身份认证
  3. 3. 用户授权
  4. 4. 粗颗粒度和细颗粒度
    1. 4.1. 如何实现粗颗粒度和细颗粒度
  5. 5. 权限模型
  6. 6. 权限控制
    1. 6.1. 基于角色色的访问控制
    2. 6.2. 基于资源的访问控制