zf权限问题(第一种)

登录成功时,把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('');任何人都没有权限




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值