用户权限控制系统如何设计???分不够就加!!! 我想设计一个用户全权限管理系统,如何去控制他们添加,删除,查看的某些信息,请大哥大姐们多多指教!!如果分不够立刻加!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【xdjzz】截止到2008-07-17 12:03:55的历史汇总数据(不包括此帖):发帖的总数量:19 发帖的总分数:630 每贴平均分数:33 回帖的总数量:16 得分贴总数量:3 回帖的得分率:18% 结贴的总数量:9 结贴的总分数:260 无满意结贴数:4 无满意结贴分:130 未结的帖子数:10 未结的总分数:370 结贴的百分比:47.37 % 结分的百分比:41.27 % 无满意结贴率:44.44 % 无满意结分率:50.00 % 楼主该结一些帖子了 两张表 一张用户信息表 一张权限表 在权限表里面有个字段叫URL 登陆的时候判断用户 然后根据每个不同的用户转发到不同的URL 用Acegi用三张表RolePermissionResource用户属于一个或多个角色,一个角色拥有多个权限,一个权限有多个资源。这三个表之间是多对多的关系。通过Acegi可以做到。对URL的权限管理。页面上加入标签,根据权限来显示标签里面的内容。更高级的可以控制到方法的调用。我现在开发的系统就是这的。绝大部分的权限要求都可以满足了。 可以分三个部分实现.第一部分是数据库部分.一般情况下,会创建三张表,一张是用户组的表,表明每个组对于哪个页面有什么样的权限,另一张表是用户表,标明用户属于哪个组的成员(规定用户只能同时属于一个组会简单些),第三张表存放每个页面所对应的权限.第二部分是逻辑控制部分.要编写一个类,负责检查权限,若不符合权限要求可以自行跳转.这样的话,在请求页面的时候,可以得到当前的页面和当前用户,根据上述的三张数据库表,找出该用户是否有权限访问请求的页面,如果可以就继续下去,如果不可以,就进行跳转.这个类的调用代码,可以放在filter里面.这样,对其他代码可以几乎不做改动.第三部分是页面显示部分.这部分应该只剩下,当不符合权限的用户进行访问时,统一的跳转页面.写一个页面就可以搞定了. 我是参照http://www.springside.org.cn/来做的。你在里面查找Acegi方面的东西。对你应该有用。 关于权限定义可以有多种方法,当然表的个数也就不一样了user用户表resource资源表role角色表roleres角色资源表userrole用户角色表 RBAC 简单来说 WHERE-WHO-WHAT-WHEN-HOW W4HWHERE:权限检查的检查域,如果只有一个域,此项可忽略;业务部门的规则和技术部门的规则是互相隔离的!WHO:谁来操作,在规则里面可能是 用户组,角色,用户实例,当前操作人是否在授权范围内WHAT:操作的目标对象,可能就是一个类型(创建时的检查),也可能是一个具体的对象WHEN:操作对象的状态,同一份数据在不同状态下的控制也是不同的,如果不考虑状态,可以忽略此项HOW:进行什么操作?创建,察看,删除,修改?以上5项构成一条规则,当然规则里面还可以包括其他信息,比如时间在每个域里面有若干这样的规则,用户登录之后的每个动作都在规则中进行匹配。 public interface IRule extends IEntity { public ISpace getSpace(); public IType getType(); public boolean applyToObject(); public String getDataID(); public IState getState(); public IActor getActor(); public boolean isApproveRule(); public boolean isGodRule(); public int getAction(); public String getActionString(); public boolean isAllAction();} public CHECKRESULT check(ISpace where,IUser who,IRBACControlled whatANDwhen,int how) { if((m_nAction&how)!=how) return CHECK_CONTINUE; if(!m_bForAllData) { if(!whatANDwhen.getType().isType(m_objType)) return CHECK_CONTINUE; if(!m_bAppliedToType) if(!whatANDwhen.getIDII().equals(m_strDataID)) return CHECK_CONTINUE; } if(!m_bForAllState) if(!m_objState.isState(whatANDwhen.getState())) return CHECK_CONTINUE; if((m_objActor instanceof Team)||(m_objActor instanceof Role)||(m_objActor instanceof Group)){ if(!((ActorContainer)m_objActor).contains(who)) return CHECK_CONTINUE; }else if(m_objActor instanceof User){ if(!m_objActor.equals(who)) return CHECK_CONTINUE; } else if(m_objActor instanceof RoleName) { if(!((RoleName)m_objActor).contains(who,whatANDwhen,where)) return CHECK_CONTINUE; } return m_bApproveRule?CHECK_APPROVED:CHECK_DENYED; } 可以看看Acegi的例子。去官方网站下就好了。不懂的话去google一下。很多配置acegi的文章的。只有运行起来,慢慢去理解才知道怎么做。 设计一个好的权限管理系统,一定要在开始做好总体规划。我看过一篇文章,本人觉得很不错,现推荐给你:http://blog.csdn.net/ekun008/archive/2006/11/06/1369824.aspx,希望对你有所补益 人家都推荐你去看Acegi了,你不能自己找吗?无语 缺少返回语句 【新手请教,请帮忙~】 关于Java工厂 一道关于泛型的小问题 空二进制大对象操作无效 简单问题 怎么用java程序下载pdf文档 请问各位高手一个有关于输入输出的问题! 很简单的问题,解决完,立即结贴! scjp的问题 文件读取中的几个小问题?请高手指点!谢谢!! 关于取得JPopMenu大小的问题,懂得来。 再问个小白问题..谁能给我解释下堆内存和盏内存..最好可以浅显点的解释.
楼主【xdjzz】截止到2008-07-17 12:03:55的历史汇总数据(不包括此帖):
发帖的总数量:19 发帖的总分数:630 每贴平均分数:33
回帖的总数量:16 得分贴总数量:3 回帖的得分率:18%
结贴的总数量:9 结贴的总分数:260
无满意结贴数:4 无满意结贴分:130
未结的帖子数:10 未结的总分数:370
结贴的百分比:47.37 % 结分的百分比:41.27 %
无满意结贴率:44.44 % 无满意结分率:50.00 %
楼主该结一些帖子了
用三张表
Role
Permission
Resource用户属于一个或多个角色,一个角色拥有多个权限,一个权限有多个资源。
这三个表之间是多对多的关系。
通过Acegi可以做到。对URL的权限管理。页面上加入标签,根据权限来显示标签里面的内容。更高级的可以控制到方法的调用。我现在开发的系统就是这的。绝大部分的权限要求都可以满足了。
这个类的调用代码,可以放在filter里面.这样,对其他代码可以几乎不做改动.第三部分是页面显示部分.这部分应该只剩下,当不符合权限的用户进行访问时,统一的跳转页面.写一个页面就可以搞定了.
来做的。你在里面查找Acegi方面的东西。
对你应该有用。
user用户表
resource资源表
role角色表
roleres角色资源表
userrole用户角色表
简单来说 WHERE-WHO-WHAT-WHEN-HOW W4H
WHERE:权限检查的检查域,如果只有一个域,此项可忽略;业务部门的规则和技术部门的规则是互相隔离的!
WHO:谁来操作,在规则里面可能是 用户组,角色,用户实例,当前操作人是否在授权范围内
WHAT:操作的目标对象,可能就是一个类型(创建时的检查),也可能是一个具体的对象
WHEN:操作对象的状态,同一份数据在不同状态下的控制也是不同的,如果不考虑状态,可以忽略此项
HOW:进行什么操作?创建,察看,删除,修改?以上5项构成一条规则,当然规则里面还可以包括其他信息,比如时间在每个域里面有若干这样的规则,用户登录之后的每个动作都在规则中进行匹配。
public interface IRule extends IEntity
{
public ISpace getSpace();
public IType getType();
public boolean applyToObject();
public String getDataID();
public IState getState();
public IActor getActor();
public boolean isApproveRule();
public boolean isGodRule();
public int getAction();
public String getActionString();
public boolean isAllAction();
}
public CHECKRESULT check(ISpace where,IUser who,IRBACControlled whatANDwhen,int how)
{
if((m_nAction&how)!=how)
return CHECK_CONTINUE;
if(!m_bForAllData)
{
if(!whatANDwhen.getType().isType(m_objType))
return CHECK_CONTINUE;
if(!m_bAppliedToType)
if(!whatANDwhen.getIDII().equals(m_strDataID))
return CHECK_CONTINUE;
}
if(!m_bForAllState)
if(!m_objState.isState(whatANDwhen.getState()))
return CHECK_CONTINUE;
if((m_objActor instanceof Team)||(m_objActor instanceof Role)||(m_objActor instanceof Group)){
if(!((ActorContainer)m_objActor).contains(who))
return CHECK_CONTINUE;
}else if(m_objActor instanceof User){
if(!m_objActor.equals(who))
return CHECK_CONTINUE;
}
else if(m_objActor instanceof RoleName)
{
if(!((RoleName)m_objActor).contains(who,whatANDwhen,where))
return CHECK_CONTINUE;
}
return m_bApproveRule?CHECK_APPROVED:CHECK_DENYED;
}
只有运行起来,慢慢去理解才知道怎么做。