关于权限设计问题
哎,搞了好几天了。user,menu,role,action然后有个user_role,role_menu,大概就是这么些表
现在我是实现了根据不同的角色取到了不同的菜单,但是接下来如何控制具体某个操作的权限啊 比如说:
a b用户都有菜单管理这一项,但是a只有查看和编辑的功能。b只有删除和新增的功能。如何才能根据这个用户获取到他应该有的操作啊。
我看了下别人的大概是这样:
a登录,获取a的所有动作。然后当页面点击删除(a不具有这个操作权限),就去对比操作集合中是否存在这个删除操作。a不具有所有没有找到。就提示没有权限。这样的话我想到几个问题:
第一:要是按照上面的方法,删除这个按钮必定是写在页面的 也就是说页面时<a herf+"xXX.do">删除</a>
第二:如果a用户不具有删除,那按道理删除这个按钮不应该显示给他看到的。而上面方法是显示了,只是点击时才告诉a不具有权限!
我的想法是:
页面的所有的操作是否可以从数据库获取到 比如数据库有action表中,id,url,name 即 1,delect.do, 删除。是否有什么办法将<a herf+"xXX.do">删除</a>改为<a herf+"${action.url}">${action.name}</a>
这样的好处是。没有权限的用户就看不到这个按钮,而且这个按钮的名字也可以在后台去修改,加入以后我删除不叫删除了叫停用。如果这样直接将action中name改为停用即可。而不用去修改页面。
求高手。。解惑啊!!!!!
------解决方案--------------------这个当然可以了,你可以使用spring-security来实现,或者自己通过查询数据来实现。
首先当用户登陆成功后将用户的个人信息(包含操作权限)放到session中,当然如果权限非常多就只把用户基本信息放在session中。进入某个页面时,应该通过一个action或者intercepter,在act或inter中判断下一个页面中涉及到的用户权限,通过数据库查询或者session获取判断这些权限当前用户是否可以操作,然后帮把结果通过request传递给页面,页面jsp中通过request中的对应值来控制某些元素显示或隐藏。
------解决方案--------------------你说的这些spring security,shiro都有实现。不过个人感觉shiro可能更符合你的需求,但是spring security更强大