表结构设计
用户登录,根据登录用户角色动态获取模块
例如:
超级管理员登录时含模块:用户管理,报表管理,系统管理
报表管理员登录时含模块:只含 报表管理 一个模块(只显示这一个)
我的设计:通过获取角色ID(role_id),从 角色模块关系表 中获取到所拥有模块 通过遍历显示在页面上
用户表 -- user_table
列: user_id user_username user_password role_id
角色表 -- user_role
列: role_id role_name
模块表 -- module_table
列: mo_id mo_name mo_url
角色模块关系表 -- role_module_relate
列: re_id role_id mo_id
存在问题:
这里只是解决了显示模块的问题,但是只要用户登录了,还是可以执行其他模块里的action
例如:一个报表管理员登录后,虽然只显示了报表管理一个模块,但是如果手动输入URL,还是可以管理其他模块
------解决方案--------------------
的确会存在这个问题,因为你只做了视图层的权限控制,所以只要知道后台的访问路径就可以通过重写URL来翻墙。要想实现后台访问权限控制就的使用如下方法了:
1.用户登录后将用户信息保存到Session中。
2.对需要做权限控制的action,添加鉴权实现,即在进入方法后先获取Session中的用户信息,通过用户角色判断是否执后面的业务代码,没权限的直接踢到别的地方去(根据需求灵活实现)。
建议:鉴权的实现和业务没关系,建议使用拦截器从切面控制(Spring AOP也可以)!
------解决方案--------------------
其实既然你用了Spring,就直接用它提供的Spring-Security来进行资源保护吧。
做法其实也就是类似于URL匹配,你的module_table里面已经存放了mo_url,这个就差不多够了;从性能角度考虑记得缓存起来用就是了。
------解决方案--------------------
------解决方案--------------------