ringa_lee
基于角色的权限控制不是一个好办法,具体可以看这篇文章:https://stormpath.com/blog/ne...
我的项目也是用的shiro,不是基于角色的,而是基于permission。简单来说就是这样的:
每个url、菜单、按钮都是一个resource,这个resource有对应的permission
角色拥有permission(若干)
判断这个角色能不能获得资源的方法很简单,看这个角色有没有对应资源permission就行了
在这里只有permission是写死的
每一个后端的请求都需要进行验证,比如说一个获取用户信息列表的ajax请求,那么会验证当前的请求有没有权限获取啊,去获取请求的cookie,在和服务器上的session做个判断,如果有权限就给他数据,如果没有就返回403之类的。
一般会将资源URL统一管理起来,会提供管理平台维护权限,利用interceptor/filter校验用户是否有对应的权限。
资源URL
interceptor/filter
你想从数据库获取角色是为什么呢?因为权限会变化?这种情况你必须要将资源维护起来,或者想要实现动态权限就不可能。
权限较为简单就像Tomcat Manager中的角色一样,那直接使用硬编码这也没有什么问题。
Tomcat Manager
最主要是需求要做成什么样子。
我觉得你这是两个问题。
首先防止接口被其他人调用,这个可以使用token的机制来做限制,没有token或者token不正确就返回403。
token
剩下的就是权限问题,用shiro和spring security等等都行,可以使用session来区分不同权限的用户。
服务端生成一个token返回给客户端,客户端每次请求就带上这个token,后端用filter统一处理;
如果能解决问题3,那问题2就没意义了;
记忆中shiro是可以在代码层面控制权限的,看一下文档吧。
权限有多个粒度的,动作权限,数据权限,不同状态条件下的权限,仅仅在某个层面上控制不了的,常见的RBAC,ACL都只能做到部分控制,还是要结合自身情况,灵活应用,没有包治百病的妙药。
你可以考虑用下Spring Security或者Shiro进行权限管理,具体操作可以去网上查查资料
基于角色的权限控制不是一个好办法,具体可以看这篇文章:https://stormpath.com/blog/ne...
我的项目也是用的shiro,不是基于角色的,而是基于permission。简单来说就是这样的:
每个url、菜单、按钮都是一个resource,这个resource有对应的permission
角色拥有permission(若干)
判断这个角色能不能获得资源的方法很简单,看这个角色有没有对应资源permission就行了
在这里只有permission是写死的
每一个后端的请求都需要进行验证,比如说一个获取用户信息列表的ajax请求,那么会验证当前的请求有没有权限获取啊,去获取请求的cookie,在和服务器上的session做个判断,如果有权限就给他数据,如果没有就返回403之类的。
一般会将
资源URL
统一管理起来,会提供管理平台维护权限,利用interceptor/filter
校验用户是否有对应的权限。你想从数据库获取角色是为什么呢?因为权限会变化?这种情况你必须要将资源维护起来,或者想要实现动态权限就不可能。
权限较为简单就像
Tomcat Manager
中的角色一样,那直接使用硬编码这也没有什么问题。最主要是需求要做成什么样子。
我觉得你这是两个问题。
首先防止接口被其他人调用,这个可以使用
token
的机制来做限制,没有token或者token不正确就返回403。剩下的就是权限问题,用shiro和spring security等等都行,可以使用session来区分不同权限的用户。
服务端生成一个token返回给客户端,客户端每次请求就带上这个token,后端用filter统一处理;
如果能解决问题3,那问题2就没意义了;
记忆中shiro是可以在代码层面控制权限的,看一下文档吧。
权限有多个粒度的,动作权限,数据权限,不同状态条件下的权限,仅仅在某个层面上控制不了的,常见的RBAC,ACL都只能做到部分控制,还是要结合自身情况,灵活应用,没有包治百病的妙药。
你可以考虑用下Spring Security或者Shiro进行权限管理,具体操作可以去网上查查资料