RBAC权限管理,Shiro实践

1.概念介绍

RBAC是指基于角色的访问控制(Role-Based Access Control),它是一种广泛应用于计算机安全领域的访问控制机制。RBAC通过将用户分配到不同的角色,来控制用户对系统中资源的访问权限。

在RBAC中,每个角色都被授予一组权限,而用户则被分配到一个或多个角色。用户可以访问与他们相关的角色所授予的权限。这种机制使得管理和授权变得更加容易,因为只需要将用户分配到角色,而不需要为每个用户单独指定其访问权限。

RBAC还可以减少错误和安全漏洞的可能性,因为访问控制是由系统管理员预先配置好的,并且与用户的身份无关。此外,RBAC还支持审计和监控,以便对用户的访问行为进行跟踪和检查。

2.表设计

  • resoure表

 RBAC权限管理,Shiro实践_第1张图片

 RBAC权限管理,Shiro实践_第2张图片

这是一个RBAC(基于角色的访问控制)的访问控制列表,它给出了一个系统中各种资源的访问权限。每个资源都被分配了一个唯一的标识符、名称和描述。RBAC的根节点(*)表示该系统的所有资源都受到RBAC的控制。下面是每个资源的详细信息:

  1. 根节点(*):表示该系统的所有资源都受到RBAC的控制。
  2. Odometer:仪表盘,被授予了dashboard权限,其URL为/dashboard,需要角色0才能访问。
  3. SetUp:系统管理,被授予了sys权限,URL为/sys,需要角色0才能访问。
  4. User:用户管理,被授予了user:view权限,URL为/users,需要角色0和角色3才能访问。用户还被分配了查看、新增、修改和删除用户的权限。
  5. Tickets:角色管理,被授予了role:view权限,URL为/roles,需要角色0和角色3才能访问。角色还被分配了查看、新增、修改和删除角色的权限。
  6. Collection:权限资源,被授予了resource:view权限,URL为/resources,需要角色0和角色3才能访问。资源还被分配了查看、新增、修改和删除资源的权限。
  7. 查看用户:被授予了user:view权限,需要角色1才能访问。
  8. 新增用户:被授予了user:create权限,需要角色1才能访问。
  9. 修改用户:被授予了user:update权限,需要角色1才能访问。
  10. 删除用户:被授予了user:delete权限,需要角色1才能访问。
  11. 查看角色:被授予了role:view权限,需要角色1才能访问。
  12. 新增角色:被授予了role:create权限,需要角色1才能访问。
  13. 修改角色:被授予了role:update权限,需要角色1才能访问。
  14. 删除角色:被授予了role:delete权限,需要角色1才能访问。
  15. 查看资源:被授予了resource:view权限,需要角色1才能访问。
  16. 新增资源:被授予了resource:create权限,需要角色1才能访问。
  17. 修改资源:被授予了resource:update权限,需要角色1才能访问。
  18. 删除资源:被授予了resource:delete权限,需要角色1才能访问。
  19. 新增组织架构:被授予了organization:create权限,需要角色1才能访问。
  20. 修改组织架构:被授予了organization:update权限,需要角色1才能访问。
  21. 删除组织架构:被授予了organization:delete权限,需要角色1才能访问。
  22. Timer:操作日志,被授予了log:view权限,URL为/logs,需要角色0和角色3才能访问。该资源还被分配了清空日志和查看日志的权限。

  •       role表

     

      RBAC权限管理,Shiro实践_第3张图片

 RBAC权限管理,Shiro实践_第4张图片

这是一个RBAC(基于角色的访问控制)中的角色清单,它给出了该系统中各种角色的权限。以下是每个角色的详细信息:

  1. 超级管理员:被授予对系统中所有用户的管理权限。这是最高权限的角色,可以修改其他角色的权限。需要谨慎使用该角色的权限。
  2. 开发者:被授予开发项目的权限,可以访问和修改系统中的资源。该角色的权限比普通用户更高。
  3. 普通用户:通常是系统中的最普通的用户,只能访问和修改自己的资源和信息。
  4. 游客:只能查看系统中的资源,无法进行任何修改或操作。该角色的权限最低。
  • role_resource表

RBAC权限管理,Shiro实践_第5张图片

 RBAC权限管理,Shiro实践_第6张图片

 该表记录了每个角色被授予了哪些资源的访问权限。

  • user表

RBAC权限管理,Shiro实践_第7张图片

 

  •  user_role

RBAC权限管理,Shiro实践_第8张图片

这是一个包含用户ID和角色ID的关联表,用于建立用户和角色之间的多对多关系。以下是每个列的详细信息:

  • user_id: 外键,指向用户表中的用户ID。
  • role_id: 外键,指向角色表中的角色ID。

该表使用用户ID和角色ID的组合来标识每个用户被授予了哪些角色,以及每个角色被授予了哪些用户。例如,如果用户ID为1被授予了角色ID为2的权限,则该表中将会有一条记录,其中user_id为1,role_id为2。

通过查询该表,可以找出某个用户被授予了哪些角色,或者找出某个角色被授予了哪些用户。这些查询可以帮助系统管理员更好地了解系统中各个用户和角色之间的关系,并对其进行管理和调整。

3.Shiro代码

RBAC权限管理,Shiro实践_第9张图片

@RequiresPermissions("role:view") 是一个基于Apache Shiro的注解,用于控制Spring Boot应用程序中方法的访问权限。该注解通常与RBAC(基于角色的访问控制)系统一起使用,用于限制用户访问某些需要特定角色权限的方法。

在Spring Boot应用程序中,当一个方法使用了@RequiresPermissions("role:view")注解,表示该方法需要用户具有role:view权限才能被访问。如果用户没有该权限,则无法调用该方法,将会抛出UnauthorizedException异常。

要使用@RequiresPermissions("role:view")注解,需要在应用程序中配置Apache Shiro安全框架,并使用@EnableShiroSecurity注解启用Shiro安全框架。同时,还需要在Shiro配置文件中定义role:view权限,并将其与相应的角色关联起来,以便系统可以在运行时根据角色权限信息进行访问控制。

总之,@RequiresPermissions("role:view")注解是一个非常有用的注解,可以帮助开发人员轻松地实现基于角色的访问控制,保护应用程序中需要受到保护的资源和方法。

你可能感兴趣的:(java,spring)