当前位置: 首页 > 知识库问答 >
问题:

springboot - RBAC 模型 鉴权,最终的权限怎么实现?

贲铭
2024-09-25

根据RBAC 模型的定义,我在数据库中建了有下面五个表:

用户表,用户-角色关联表,角色表,角色-权限关联表,权限表

现在我已经写好了对应的拦截器,并且在拦截器中通过token获取到用户,再通过这几张表获取到当前用户所拥有的权限列表了,

但是这个权限列表是怎么用的?

就比如 : 我知道前端项目需要做动态路由的时候会需要后端帮忙存储一个 路由表,一个 角色-路由关联表 ,是不涉及到权限表的,或者说这个路由表就是权限表。

那么现在,后端有100个 接口,其中各自需要对应的角色,有十个游客可以访问,二十个需要登录才能访问,三十个需要管理员才能访问,四十个需要超级管理员才能访问。那是不是也需要像路由一样在数据库存一个 接口地址的表 和一个 角色-接口地址关联表 ? 那这样的话,权限表也没有用到呀?还是有什么其他方案呢?

共有2个答案

郤飞英
2024-09-25

每个接口的访问都是对应到某个具体的权限,用户具有这个权限就可以访问,不具有就不可访问。
用户是不是具有这个权限,就看用户所有角色中是不是有这个权限项。
这样的好处就是方便的处理一类具有 相同权限的用户,一起管理,添加删除修改权限,角色的目的就是为了方便批量处理权限。 没有角色的话系统也可以运作,只不过需要针对每个用户分别设置每个权限项。

同时,权限项跟接口并不是一一对应的,接口是开发对接的东西,权限项是给运维甚至用户直接看到和使用的,比如存在不匹配的情况,对于用户理解的一个权限项,可能意味着3个接口可用,但是其中一个接口的部分参数有效,这是有可能的。

龚宏壮
2024-09-25

RBAC 5张表是最基础的5张,这里的权限表是一个统称,权限也就是拥有的资源,页面,按钮,接口,文件,等等都能称作是资源,每种资源我们都需要建立一张表存放这个资源的清单,然后往角色-权限关联表中插入数据以给角色分配这种资源的权限。
所以你说的路由表和角色-路由关联表,其实就是页面资源表,和角色-权限关联表。
我们典型的使用资源表就是两张,一个页面资源表,一个按钮资源表,外加一个辅助的按钮和页面的关系表,这样我们通过权限就管理起来了前端的页面权限和按钮权限。
至于如果你还想控制接口权限,你可以选择再增加一张接口资源表,但为了省事现在大多数系统都是把按钮权限拿来复用当做接口权限,你在前端页面没有这个按钮权限,那么按钮对应的后端接口你也没有权限,这两者绑定在一起也说得通的,不知道你理解没有。
分享一下我最近刚做的:
这个是菜单和按钮管理
image.png
这个是权限管理
image.png
权限管理就是将资源分配给角色,分配好以后,我们就可以在前端及后端读取当前用户的角色,查询角色拥有的资源,判断是否包含当前资源,前端页面资源控制可以使用动态路由,按钮资源控制可以使用vue自定义指令,后端接口资源控制可以使用Aop+自定义注解,也可以选择集成springSecurity

 类似资料:
  • 业务场景: 同一个登陆页面,管理员和普通用户有不同的用户名和登录密码。登陆之后需要进入不同的home页面,以此类推,导航栏也完全不同。所有UI和功能都不同。也就是说同一套代码,登陆的之后却是不同的网络应用。 问题: 这种设计在开发中会不会有什么不便的地方。比如:这一个代码库跑在localhost:3000上面,那么存储的token也在这个3000 localStorage下面,如果我想要同时开发“

  • 主要内容:1.权限模型,2.权限系统表设计1.权限模型 1.1 权限设计 从业务分类上来讲权限可以分为,等, 对应到系统设计中有页面权限、菜单权限、按钮权限等。菜单也分一级菜单、二级菜单甚至三级菜单. 按照这个架构,按钮的父级是二级菜单,二级菜单的父级是一级菜单,这样用户申请权限的时候非常清晰的看到自己需要哪些权限。 1.2 为什么需要角色 这种模型能够满足权限的基本分配能力,但是随着用户数量的增长,这种模型的弊端就凸显出来了,每一个用户

  • 我正在尝试在一个网站上实现RBAC(基于角色的访问控制)。 问题是嵌套对象的权限。 假设我们在网站上有一些项目。每个用户在每个项目中都可以有一个角色。例如,user1在project1中具有admin角色,在Project2中具有customer角色。 例如,admin角色包含一些权限,如添加子项目、删除子项目等。 我读过的关于RBAC的所有文档都定义了一般的权限,如添加子项目,但当用户具有此权限

  • auth权限是怎么实现的? 怎么用go写一个auth权限?

  • 用户类型 DEV_XIAOMI_SSO, 即在SDS控制台通过用户名密码登录的方式,登录后身份为Developer,拥有该开发者帐号下所有表的owner,拥有所有权限 DEV_XIAOMI, 使用AccountKey/AccountSecret通过SDK进行签名认证的方式,认证后身份为Developer,拥有该开发者帐号下所有表的owner,拥有所有权限 APP_SECRET, 使用AppKey/

  • 概述 IoT系统使用OAtuh2协议进行接入与授权操作。原生的OAuth2支持Authenticatoin Code,Password,Client Credentials,Implicit四种授权模式。IoT系统扩展了OAuth2协议,以支持更多的接入方式,如基于微信登录的js_code模式,基于短信或邮件验证码的captcha模式。具体来讲,IoT系统支持以下授权模式: Js Code 适用于