日期:2014-05-20  浏览次数:20795 次

关于即时权限问题。
在做一个系统后台管理时,需要分配帐户的权限列表。
我的问题是:

不同权限的管理员登陆进去之后,生成相应的session,然后从session里面来获取权限列表。

如果超级管理员要改变他的权限,并且要马上生效(其它管理员此时在系统里),如何来设计?难道每次在访问一个模块时,都读取数据库权限列表字段,来更新用户的最新权限?

例如:

user: dmh 登陆成功后的权限列表是:1,2,4,5

超级管理员,现在要去掉dmh 的1权限,修改它的字段值为2,4,5

如何让dmh的权限即时刷新成 2,4,5,而不是登陆成功后的 1,2,4,5

难道非得每次从数据库取出权限列表字段后,再进行分割校对权限?

有没有其它更好的办法?



------解决方案--------------------
1. 使用 javax.servlet.http.HttpSessionListener 监控用户登录成功后的 Session 创建和注销时的 Session 销毁,创建时将保存有用户权限的 Bean 装入一个全局 Map,销毁时从 Map 中移出(此 Map 的 Key 可以用 UserID)。
2. 超级管理员修改用户数据库中权限记录后,到 Map 中去查找此用户权限 Bean,如果找到就把它标记为已过期(可以在权限 Bean 中加一个属性保存权限是否已过期),如果没找到说明用户尚未登录。
3. 在用户操作前的权限判断中先查看权限是否已过期,如果未过期则直接从 Bean 中读取,如果已过期则用数据库中修改后的权限重新装填 Bean,然后再读取。
------解决方案--------------------
你能得到其他人的sessionid么?
------解决方案--------------------
2楼正解.