今天遇到一个问题
我有一个系统,是基于角色的权限控制.
前端自然就是根据角色来控制应该显示的视图.
但是为了防止别人直接用httpclient访问,那么后台肯定也要对相应的权限进行控制.
进行交互时,我能知道的只有用户是谁
从而我可以知道的他的角色.
那么我想知道在代码层级的控制是怎么控制的.如何控制某个角色只能访问一类url?
我的想法是
1.后台需要维护整个系统的url(即提供的接口)
2.维护系统所需要使用的视图(菜单,按钮等,因为接口的使用与视图基本绑定)
3.视图和角色绑定,用户和角色绑定
这样做就很麻烦
1.维护整个系统的url工作量超大
2.维护视图对应的接口URL工作量也超大
3.基于资源的RESTFUL接口有很多在url上的参数,正则会比较复杂,情况较多
后来,我看到了SHIRO中可以这样进行权限控制
在接口中,如springmvc接口
@RequireRoles("admin") @RequestMapping("/{id}") public void get(){ xxx }
如何我可以这样,直接接口所需要的角色使用Annotation在接口层处拦截,工作量就大大减少.但是目前看到的方案这种的role都只能hardcode.不能从数据库动态获取.
所以问题有3个.
1)大家这种情况是怎么处理的
2)我的工作量十分大的方案是否合理?是否有改善的方法
3)shiro有可能在接口层处直接进行角色权限的控制并且所需要的角色从数据库中获取吗?
各位大侠,感激不尽!
------以下补充-----------
前后端通过token验证这是肯定的,我想问的其实是token验证通过之后
那我手上的数据有
1.当前访问的URL
2.当前用户,当前用户的角色
我是觉得针对角色去维护URL实在是比较麻烦.来想问问有没有更好的解决方案
三叔2016-10-27 10:03:47
基于角色的权限控制不是一个好办法,具体可以看这篇文章:https://stormpath.com/blog/ne...
我的项目也是用的shiro,不是基于角色的,而是基于permission。简单来说就是这样的:
每个url、菜单、按钮都是一个resource,这个resource有对应的permission
角色拥有permission(若干)
判断这个角色能不能获得资源的方法很简单,看这个角色有没有对应资源permission就行了
在这里只有permission是写死的