关于RBAC的权限设计的问题,如何做都方法级别的控制

时间:2022-11-17 14:56:30
1、目前的权限设计的RBAC 五张经典的表结构
用户
角色
菜单

用户_角色
角色_菜单



2、页面只能对有无权限进行显示 (例如用户无添加权限,自然页面也就看不到这个按钮)

现在的问题是:如果用户知道添加的action,
他可以直接构造这个url请求地址,这样也是可以达到添加用户的目的的。

请问类似这样的需求该如何设计呢。
谢谢。

16 个解决方案

#1


别人知道url,但是他请求时,服务器可以后端可以过去权限表,检测用户是否有权限,没有,就拦截请求!有就通过请求!

#2


引用 1 楼 heardy 的回复:
别人知道url,但是他请求时,服务器可以后端可以过去权限表,检测用户是否有权限,没有,就拦截请求!有就通过请求!


比如权限是:
关于RBAC的权限设计的问题,如何做都方法级别的控制

ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,
表示 admin的角色有用户管理的 添加、编辑、查询、查看、导出权限。

现在在页面上,有添加、编辑、查询、查看、导出权限对应的按钮,

按钮可以隐藏显示,但是后台的方法确没有做出判断。

比如添加用户这个模块,一般来说 有一个导航到添加用户的方法 toAddUser(),添加的时候就是 addUser方法,


哪这两个方法怎么处理呢?

ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。

#3


权限这块,想做好,好麻烦。

#4


看到过类似系统,不过没看是怎么实现的。
我想的话,可以用spring切面来做,在执行增删改查前,先在切面方法中判断用户有无操作权限。

#5


引用 4 楼 uyerp 的回复:
看到过类似系统,不过没看是怎么实现的。
我想的话,可以用spring切面来做,在执行增删改查前,先在切面方法中判断用户有无操作权限。

原理都是这个原理,SpringSecurity 也可以,不过还是shiro简单点

#6


我在网上搜到的,不知道对楼主有没有帮助:
http://blog.sina.com.cn/s/blog_5183d2c80100iqc5.html

#7


引用 2 楼 Javainging 的回复:
ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。

#8


引用 7 楼 qq_31417619 的回复:
Quote: 引用 2 楼 Javainging 的回复:


ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。


这两个都要防是什么意思,怎么做到呢,3Q

#9


页面部分可以

引用 8 楼 Javainging 的回复:
Quote: 引用 7 楼 qq_31417619 的回复:

Quote: 引用 2 楼 Javainging 的回复:


ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。


这两个都要防是什么意思,怎么做到呢,3Q


页面部分可以用过滤器自己根据角色判断是不是有访问页面的权限或者用框架也行,其实你自己用过滤器也方便的,你可以在权限表里加个栏位保存地址路径,对应页面放在不同文件夹下面。
保存数据库之前判断下角色有没有对应数据库操作的权限。

#10


引用 9 楼 qq_31417619 的回复:
页面部分可以

Quote: 引用 8 楼 Javainging 的回复:

Quote: 引用 7 楼 qq_31417619 的回复:

Quote: 引用 2 楼 Javainging 的回复:


ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。


这两个都要防是什么意思,怎么做到呢,3Q


页面部分可以用过滤器自己根据角色判断是不是有访问页面的权限或者用框架也行,其实你自己用过滤器也方便的,你可以在权限表里加个栏位保存地址路径,对应页面放在不同文件夹下面。
保存数据库之前判断下角色有没有对应数据库操作的权限。


感觉这样有点麻烦了;谢谢

#11


1、过滤器过滤(可以拦截所有请求,包括.jsp、.action、.css等)
2、拦截器,可以拦截.action请求
3、spring的aop拦截,和拦截器类似,不过拦截面更广,不过和拦截器一样都不可以拦截对jsp页面地访问
以上三种方法都需要对请求url进行权限验证,可以把用户权限列表放在session里或者即使连接数据库查询

#12


引用 11 楼 tiaoxixiaoji 的回复:
1、过滤器过滤(可以拦截所有请求,包括.jsp、.action、.css等)
2、拦截器,可以拦截.action请求
3、spring的aop拦截,和拦截器类似,不过拦截面更广,不过和拦截器一样都不可以拦截对jsp页面地访问
以上三种方法都需要对请求url进行权限验证,可以把用户权限列表放在session里或者即使连接数据库查询

有具体demo不 谢谢

#13


好像权限管理不能做成通用的了,好麻烦。

#14


后台生成token前台请求时带上这个token,然后在后台校验,正常页面的请求是有token的,没有token的一个都会被拦截

#15


引用 14 楼 qq_24663329 的回复:
后台生成token前台请求时带上这个token,然后在后台校验,正常页面的请求是有token的,没有token的一个都会被拦截

#16


shiro的权限字符串就可以,
而且支持注解,
在你的方法上标注,/**
 * 只有拥有user:create权限的用户才能添加用户
 * */
@RequiresPermissions("user:create")
@RequestMapping("saveUser.do")

这样。

#1


别人知道url,但是他请求时,服务器可以后端可以过去权限表,检测用户是否有权限,没有,就拦截请求!有就通过请求!

#2


引用 1 楼 heardy 的回复:
别人知道url,但是他请求时,服务器可以后端可以过去权限表,检测用户是否有权限,没有,就拦截请求!有就通过请求!


比如权限是:
关于RBAC的权限设计的问题,如何做都方法级别的控制

ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,
表示 admin的角色有用户管理的 添加、编辑、查询、查看、导出权限。

现在在页面上,有添加、编辑、查询、查看、导出权限对应的按钮,

按钮可以隐藏显示,但是后台的方法确没有做出判断。

比如添加用户这个模块,一般来说 有一个导航到添加用户的方法 toAddUser(),添加的时候就是 addUser方法,


哪这两个方法怎么处理呢?

ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。

#3


权限这块,想做好,好麻烦。

#4


看到过类似系统,不过没看是怎么实现的。
我想的话,可以用spring切面来做,在执行增删改查前,先在切面方法中判断用户有无操作权限。

#5


引用 4 楼 uyerp 的回复:
看到过类似系统,不过没看是怎么实现的。
我想的话,可以用spring切面来做,在执行增删改查前,先在切面方法中判断用户有无操作权限。

原理都是这个原理,SpringSecurity 也可以,不过还是shiro简单点

#6


我在网上搜到的,不知道对楼主有没有帮助:
http://blog.sina.com.cn/s/blog_5183d2c80100iqc5.html

#7


引用 2 楼 Javainging 的回复:
ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。

#8


引用 7 楼 qq_31417619 的回复:
Quote: 引用 2 楼 Javainging 的回复:


ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。


这两个都要防是什么意思,怎么做到呢,3Q

#9


页面部分可以

引用 8 楼 Javainging 的回复:
Quote: 引用 7 楼 qq_31417619 的回复:

Quote: 引用 2 楼 Javainging 的回复:


ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。


这两个都要防是什么意思,怎么做到呢,3Q


页面部分可以用过滤器自己根据角色判断是不是有访问页面的权限或者用框架也行,其实你自己用过滤器也方便的,你可以在权限表里加个栏位保存地址路径,对应页面放在不同文件夹下面。
保存数据库之前判断下角色有没有对应数据库操作的权限。

#10


引用 9 楼 qq_31417619 的回复:
页面部分可以

Quote: 引用 8 楼 Javainging 的回复:

Quote: 引用 7 楼 qq_31417619 的回复:

Quote: 引用 2 楼 Javainging 的回复:


ROLE_ADMIN:sysuser:add,edit,delete,search,view,export,  有sysuser:add 就表示这两个方法都有权限了还是?谢谢。


做的好,两个地方都要防,首先是添加的页面访问限制,最后是数据保存之前再判断一下。


这两个都要防是什么意思,怎么做到呢,3Q


页面部分可以用过滤器自己根据角色判断是不是有访问页面的权限或者用框架也行,其实你自己用过滤器也方便的,你可以在权限表里加个栏位保存地址路径,对应页面放在不同文件夹下面。
保存数据库之前判断下角色有没有对应数据库操作的权限。


感觉这样有点麻烦了;谢谢

#11


1、过滤器过滤(可以拦截所有请求,包括.jsp、.action、.css等)
2、拦截器,可以拦截.action请求
3、spring的aop拦截,和拦截器类似,不过拦截面更广,不过和拦截器一样都不可以拦截对jsp页面地访问
以上三种方法都需要对请求url进行权限验证,可以把用户权限列表放在session里或者即使连接数据库查询

#12


引用 11 楼 tiaoxixiaoji 的回复:
1、过滤器过滤(可以拦截所有请求,包括.jsp、.action、.css等)
2、拦截器,可以拦截.action请求
3、spring的aop拦截,和拦截器类似,不过拦截面更广,不过和拦截器一样都不可以拦截对jsp页面地访问
以上三种方法都需要对请求url进行权限验证,可以把用户权限列表放在session里或者即使连接数据库查询

有具体demo不 谢谢

#13


好像权限管理不能做成通用的了,好麻烦。

#14


后台生成token前台请求时带上这个token,然后在后台校验,正常页面的请求是有token的,没有token的一个都会被拦截

#15


引用 14 楼 qq_24663329 的回复:
后台生成token前台请求时带上这个token,然后在后台校验,正常页面的请求是有token的,没有token的一个都会被拦截

#16


shiro的权限字符串就可以,
而且支持注解,
在你的方法上标注,/**
 * 只有拥有user:create权限的用户才能添加用户
 * */
@RequiresPermissions("user:create")
@RequestMapping("saveUser.do")

这样。