#1 lhabc
建立一个用户组表,groupid,gname。。。。用户表user,id,name,groupid。。。。
acl表用原来的,加一个字段标志,是否公共部分,如登录页面
权限表,对应组groupid,aclid,一个组所拥有的acl权限列表
思路是这样:开页面开始检查控制器名称和动作名,是否是公告部分标志,如果是直接返回1,就是登录的页面了。用户登录后取用户组groupid,根据groupid查询权限表中是否拥有改模块的权限。
重写checker函数
public function checker($acl_name = SPANONYMOUS,$controller, $action){
$gid=spClass('spAcl')->get();
$condition_ck=array('controller'=>$controller,'action'=>$action);
$acl_check=spClass('lib_acl')->find($condition_ck);
if($acl_check){
if( $acl_check['flag']=='public'){
return 1;
} else
{
$condition='groupid='.$gid;
$qx=spClass('lib_popedom')->findAll($condition);
$check_stat=false;
foreach ( $qx as $qxcheck => $qxcheck_value ) {
if( $acl_check['aclid']==$qxcheck_value['aclid']){//模块id是否在对应组groupid权限表中
$check_stat=true;
return 1;
}
}
if($check_stat==false) return 0;
}
}else{
return -1;
}
}
顺便发一张初稿图
估计还有什么地方不妥,欢迎大家提出建议,或者有更高效率的做法
2011-04-21 11:22:02