RBAC权限控制模型(Role-Based Access Control)基于角色的访问控制。

RBAC认为权限的过程可以抽象概括为:判断【Who是否可以对What进行How的访问操作(Operator)】这个逻辑表达式的值是否为True的求解过程。

其实就是要求抽象出不同的角色角色拥有不同的权限当一个用户符合某个角色的时候将角色和用户绑定那么用户就拥有了和角色相同的权限

下面我来讲一个shiro框架,是一个用来做角色访问控制的,但因为我们的项目不仅需要具体到角色和权限,还要具体到谁在哪里具有公司/分公司/部门/个人的权限,同时也要确定是查询还是编辑权限,所以较为困难,另外建议学习spirng security,也能解决项目的权限问题。现在的权限是直接通过interceptor拦截器完成的权限判断和拦截Shiro(权限管理框架)
Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,而是与当前应用交互的任何东西都是Subject,如爬虫机器人等。即一个抽象概念。所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager,可以把Subject认为是一个门面,SecurityManager才是真正的执行者。

SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互,且它管理者所有的Subject,是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过Spring MVC,可以看成是DispatcherServlet前端控制器。

Realm:(域或者范围)其实就是安全的数据源,外界的验证(如用户、角色、权限)需要从这里来获取正确的数据进行对比。

  • Realm中有两个方法
    • AuthorizationInfo:授权,当用户合法的时候,就会从数据库获取该用户的角色和权限。然后将角色和权限信息写入到该info中。SecurityManager就会根据返回的角色和权限名称等来判断当前路径是否有权访问。判断规则卸载了Shiro的配置文件中。
    • AuthenticationInfo:身份验证、登录信息,验证用户是不是合法身份。
      Shiro(权限管理框架)

到底是怎么判断权限的呢?

Shiro可以配置权限过滤器,当Shiro通过Realm获取到了AuthenticationInfo和AuthorizationInfo的时候,它就拥有了该用户的登录以及角色和权限信息。这样它就可以通过过滤器来进行过滤
Shiro(权限管理框架)

  • anno: /admins/**=anon 没有参数,表示可以匿名使用
  • authc:/admins/user/**=auth表示需要认证登录才能使用,没有参数
  • roles:例子/admins/user/**=roles[“admin”,“guest”],在括号中参数可以写多个,多个时要用引号且用逗号分隔。表示当前用户只有拥有这两个角色才能放行。
  • perms:/admins/user/**=perms[user:add:*],参数可以写多个,多个时用逗号分隔,表示该用户必须有这几个权限才能通行
  • rest:例子/admins/user/=rest[user],根据请求的方法,相当于/admins/user/=perms[user:method] ,其中method为post,get,delete等。
  • port: 例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal: //serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的 host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。

这些过滤器中anon,authcBasic,auchc,user是认证过滤器,perms,roles,ssl,rest,port是授权过滤器
至此配置工作已完成。

分类:

技术点:

相关文章: