YII权限判断?

YII权限判断?


莫回无
浏览 657回答 1
1回答

神不在的星期二

可以用rbac解决,admin设置为角色 role,news和product设置为任务 task。1、在config/main.php中加入authManager设置:'db'=>array('connectionString' => 'mysql:host=localhost;dbname=ooxx','emulatePrepare' => true,'username' => 'xxx','password' => 'xxx','charset' => 'utf8',),'authManager' => array('class' => 'CDbAuthManager','connectionID' => 'db',),2、在数据库中创建rbac对应系统表。在 yii-1.x.xx\framework\web\auth 这个目录下找到数据库对应脚本,在数据库中执行创建操作,编码之类的可以自行修改。3、编写设置权限关系的代码,按照你的设定有news和product操作权限,执行一次即可(注意本代码适用于Yii最新的版本,我用的是1.1.13,早期的一些版本需要把createAuthItem替换成对应方法,请查看Yii api):$auth = Yii::app()->authManager;// 清除所有权限设置$auth->clearAll();// 创建操作$auth->createAuthItem('newsAdd', CAuthItem::TYPE_OPERATION, '新增新闻');$auth->createAuthItem('newsRecommend', CAuthItem::TYPE_OPERATION, '推荐新闻');$auth->createAuthItem('productAdd', CAuthItem::TYPE_OPERATION, '新增产品');$auth->createAuthItem('productDel', CAuthItem::TYPE_OPERATION, '删除产品');// 创建任务$auth->createAuthItem('newsManage', CAuthItem::TYPE_TASK, '新闻管理');$auth->addItemChild('newsManage', 'newsAdd');$auth->addItemChild('newsManage', 'newsRecommend');$auth->createAuthItem('productManage', CAuthItem::TYPE_TASK, '产品管理');$auth->addItemChild('productManage', 'productAdd');$auth->addItemChild('productManage', 'productDel');// 创建角色并指定可以执行的任务$auth->createAuthItem('admin', CAuthItem::TYPE_ROLE, '超级管理员');$auth->addItemChild('admin', 'newsManage');$auth->addItemChild('admin', 'productManage');// 为用户赋予角色权限$auth->assign('admin', 'user01');4、在需要检查权限的地方:// 如果是检查操作operationif (Yii::app()->user->checkAccess('productAdd')){// 当前用户拥有新增产品的权限}// 如果是检查用户的角色role或者拥有的任务task 权限if (Yii::app()->authManager->isAssigned('admin', Yii::app()->user)) {// 当前用户拥有角色admin}
打开App,查看更多内容
随时随地看视频慕课网APP