登录成功时,把admin_user表的uid写入session中
根据session的uid获得admin_user表当前uid下的权限
因为uid在前一篇已写入到session中
获取session中的uid
$session = new Zend_Session_Namespace(SESSION_LOGIN);
$uid = $session->uid;
根据$uid获取admin_user的记录
Ata_Db_Static::getTable('AdminUser')->find($uid)->current();//获取条件下的当前记录
权限设置
$roles = $user->permission ? explode(', ' $user->permission) : array(*); //判断$user->permission是否为空,不为空把权限拆分成数组,为空 权 限为数组 array(*)
$roles[] = '*'
$roles = array('*', '*');或者$roles = array('admin', '*')等
解疑
判断当前登录的用户的权限是否为空,为空就是array('*'),不为空就是array('当前权限');
$roles = array('*','*')或者$roles = array('当前权限','*');
权限acl.ini文件
about.*.* = * //about.*.* = * about是module,*是controller,*是action,*是权限。也就是about module模块所有人都有权限。
career.*.* = *
default.*.* = *
exam.*.* = *
news.*.* = *
search.*.* = *
sitemap.*.* = *
view.*.* = admin
admin.*.* = admin //admin模块只有admin权限才行
admin.auth.* = * //例外,admin模块下的auth控制器,所有人都有权限
admin.index.*= admin,news,file,kaosheng //admin模块index控制器下,只有admin,news,file,kaosheng才有权限。
admin.user.* = admin,news,file,kaosheng
admin.news.* = admin,news
admin.file.* = admin,file
admin.kaosheng.* = admin,kaosheng
所以登录成功后判断是否有这个模块这个控制器这个动作的权限
没登陆时,$roles = array('*', '*') *
登录后,$roles = array('admin', '*') admin
判断是否有这个页面的权限
$urls = $this->getRequest()->getParams();
获取当前页面的modu,controller,action
$acls = Zend_Registry::get('acls')->toArray();// 获取acls注册表的信息,转换为数组
bootstrap.php中已经把acl.ini文件的内容设置为注册表内的信息了
protected function _initAcls(){
$acls = new Zend_Config_Ini(APPLICATION_PATH . '/configs/acl.ini'); //Zend_Config_Ini()
Zend_Registry::set('acls', $acls); //设置注册表 Zend_Registry::set('注册表名', '信息');
return $acls;
}
$acl = $acl ? $acl : $acls[$url[module]][$url[controller]][$url[action]];//module,controller,action 下的权限
$acl = $acl ? $acl : $acls[$url[module]][$url[controller]]['*']; //module,controller下的权限
$acl = $acl ? $acl : $acls[$url[module]]['*']['*'] //module下的权限
$acl = $acl ? $acl : ''; //空值$acl = '';
$acl有值话的就不往下执行了。
$acl是当前页面所需要的权限
如admin模块所需权限是admin
把$acl字符串转为数组
几种数组类型array(*)所有人都有权限, array('admin', 'news')只有admin,news有权限, array('')不存在这个页面错误页面,没权限;
count(array_intersect($roles, $acl)); //array_intersect()取交集 count()计算数目
现在知道为何要加 $roles[] = '*'了吧。
不加的话,你现在的权限$roles = array('admin'),却不能访问about 模块
$acl = array('');任何人都没有权限