若依之权限处理

若依之权限处理

若依前后端不分离版本使用的是shiro进行权限控制,本文主要是对shiro在若依中的使用进行分析。

RBAC权限模型

RBAC是指基于角色的访问控制。其基本思想是,对系统的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个权限集合。每一个角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就用此角色的所有操作权限。(以上内容来自百度百科——RBAC)
画张图解释一下:
若依之权限处理_第1张图片
在RBAC模型中,有三个核心概念:角色、权限和用户。角色是指一组具有相似权限的用户,权限是指允许执行某些特定操作的能力,而用户则是指实际访问系统的人。
RBAC模型还有一个重要的概念——访问决策。访问决策是指系统如何根据给定的角色和权限来控制用户对资源的访问。当用户请求访问某个资源时,系统会根据用户的角色和权限,判断是否允许访问。

shiro介绍以及简单使用

shiro认证和授权

若依中shiro的使用

若依中权限相关的表模型如下:
若依之权限处理_第2张图片
现在对上面中涉及到的表进行介绍:

  • sys_user_role:用户角色的关联表;
  • sys_user:用户表,存储用户相关信息;
  • sys_role:角色表;

角色菜单权限

登录若依后,在系统管理菜单下,可以用户管理和角色管理两个子菜单。用户可以先在角色管理中新建角色,然后给角色赋予对应的权限,然后再在用户管理中给用户授予角色,这样用户就有了相应角色的权限。

操作页面

用户管理页面
若依之权限处理_第3张图片

角色管理页面
若依之权限处理_第4张图片
新建角色时需要设置权限字符和菜单权限。权限字符主要是用户在controller中控制用户是否有操作的权限;菜单权限则指定了用户可以看到哪些菜单。
若依之权限处理_第5张图片

代码逻辑

权限相关逻辑代码主要是在ruoyi-admin模块中,其中主要的控制器入口是:SysMenuController、SysRoleController、SysUserController。
若依之权限处理_第6张图片
实体类和mapper接口、mapper映射文件主要是ruoyi-system模块中。
若依之权限处理_第7张图片

权限这块的逻辑需要从用户登录开始讲。由于若依使用的shiro框架,所以需要自定义一个Relam,然后重写认证(判断用户能否登录,把用户输入的用户名和密码与从数据库中查询到的进行比较)和授权()接口。登录的时候调用subject.login方法即可。

若依之权限处理_第8张图片

认证方法主要做的事情如下:根据用户输入信息去数据库中查询,将查询到的信息封装成SimpleAuthenticationInfo对象,密码的比对是由shiro完成的。
若依之权限处理_第9张图片
授权方法如下:根据当前用户查询用户被赋予了哪些角色,以及用户有哪些菜单的权限;将查询出来的信息放到SimpleAuthorizationInfo对象中。到这里为止用户具有哪些菜单和操作的权限就已经查询出来并设置到相应的对象中去了。
若依之权限处理_第10张图片

菜单的展现

在list接口上添加了@RequiresPermissions(“system:menu:list”)注解表示访问这个接口需要system:menu:list权限。而用户有没有这个权限是在登录的时候查询并设置的。如果进行二次开发的时候,我们也可以在创建角色的指定权限字符,然后在接口中根据权限注解判断有没有权限访问接口。
若依之权限处理_第11张图片
如果不是admin用户,则查询表sys_role_menu、sys_user_role、sys_role、sys_menu获取当前用户能看到的菜单。
若依之权限处理_第12张图片

数据权限

在编辑角色的时候可以给角色指定数据权限。
若依之权限处理_第13张图片
数据权限是通过注解和切面来完成的。若依提供了DataScope注解,DataScopeAspect、PermissionsAspect。

参考

  • 若依官网

你可能感兴趣的:(若依,java,数据库,shiro)