• 一、权限管理の引言


    I、什么是权限管理

    	基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者[安全策略](http://baike.baidu.com/view/160028.htm) 控制用户可以访问而且只能访问自己被授权的资源。
    
    	权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
    

    II、权限管理

    Authentication:身份认证/登录,验证用户是不是拥有相应的身份; 
    
    Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用 户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用 户对某个资源是否具有某个权限;
    

    1、Authentication 认证

    1. Subject:主体

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

    1. Principal:身份信息

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

    1. credential:凭证信息

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

    1. token = Principal + credential + 票据信息

    2、Authorization 授权

        授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。
    
     Who,即主体(Subject),主体需要访问系统中的资源。
    
    What,即资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为t01的[商品]()为资源实例,编号为001的商品信息也属于资源实例。
    
    How,权限/许可(Permission),规定了主体对资源的操作[许可](),权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号为001用户的修改权限等,通过权限可知主体对哪些资源都有哪些操作许可。
    
    权限分为粗颗粒和细颗粒, 粗颗粒权限是指对资源类型的权限,细颗粒权限是对资源实例的权限。
    

    权限模型

    权限控制

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

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

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

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

    Shiro

    Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。
    java领域中spring security(原名Acegi)也是一个开源的权限管理框架,但是spring security依赖spring运行,而shiro就相对独立,最主要是因为shiro使用简单、灵活,所以现在越来越多的用户选择shiro。
    

  • 相关阅读:
    [置顶] Android中定时器的3种实现方法
    [置顶] Android代码应用程序通过WakeLock保持后台唤醒状态
    [置顶] 当爱情遇上互联网
    [置顶] Android咨询阿米巴基金合伙人李治国:我为什么投资快的打车?
    [置顶] Android问题Getting Android Sensor Events While The Screen is Off
    静态SQL和动态SQL
    IBM Data Studio使用对象创建的双引号/大小写问题以及表/列重命名
    DB2数据库查询过程(Query Processing)统计信息与过滤因子(Statistics and Filter Factors)
    DB2数据库查询过程(Query Processing)概述
    DB2数据库查询过程(Query Processing)表扫描与I/O(Table Scan and I/O)
  • 原文地址:https://www.cnblogs.com/adrien/p/10218783.html
Copyright © 2020-2023  润新知