实现实现前后端分离的RBAC模型的困惑

来源:7-8 授权流程源码解析和用户组的思路扩展

hp2266

2022-06-25

老师,有一个困惑一直没想明白,我看代码里面写hasRole(“USER”)或者hasRole(“ADMIN”),我理解是不是系统必须固定住这样的角色,比如ROLE_USER 可以访问 A资源、B资源 ,ROLE_ADMIN 可以访问A资源、B资源、C资源;
那比如像一些后台管理系统,角色这块管理员是可以通过前端编辑角色的,比如新增角色ROLE_A 可以访问 C资源、D资源 ,新增角色ROLE_B 可以访问 E资源、F资源 ,也就是角色是会变化的,那代码又是写死hasRole(“USER”) 、hasRole(“ADMIN”),该怎么去实现?一直没理解这块,我是否可以不使用hasRole(“xxx”),
直接在资源上使用@PreAuthorize(“hasAnyAuthority(‘user_add’)”) @PreAuthorize(“hasAnyAuthority(‘user_edit’)”) 等,如果这样可行的话,又有另一个困惑,一个系统怎么也有几十个资源,每个资源又有增删改查,这样就有几十上百个权限标识,如user_add、user_edit、role_add、role_edit、role_del等等,权限标识放在jwt TOKEN里面,TOKEN会特别的长,不知道jwt有没有长度限制?这样是否可行。看了很多免费课程都跟我想象的不一样,我总是停留在单体应用前后不分离的那种RBAC模型里面。最后看到老师的课程介绍,感觉是我想要的,但是快看完课程了,我还是没完全理解,如何实现前后端分离的RBAC模型。

写回答

1回答

接灰的电子产品

2022-07-05

没有任何一种模型能实现所谓的真正意义上的动态分配权限,试想一下,如果真的有这样的模型,那么我们只要有一个系统,以后就不用编码了,直接使用这个权限系统就行了。事实上你需要界定清楚颗粒度,所谓的动态分配权限,其实是动态组合权限,也就是在系统最小颗粒度上,我们定义好权限,然后在界面上进行组合。也就是你可以创建一个角色,这个角色其实对应一组权限,这个权限怎么组合可以在界面上自由定义。jwt 本身没有 token 长度限制,你提到的太多权限,其实可以用角色来替代,一个角色就是一组权限

0
0

Spring Security+OAuth2 精讲,打造企业级认证与授权

一站式掌握主流安全框架与行业解决方案,从容应对各种安全难题。

1042 学习 · 316 问题

查看课程