为了账号安全,请及时绑定邮箱和手机立即绑定

YII权限判断?

YII权限判断?

Yii
莫回无 2018-11-26 04:00:50
YII权限判断?
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

可以用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、在需要检查权限的地方:
// 如果是检查操作operation
if (Yii::app()->user->checkAccess('productAdd'))
{
// 当前用户拥有新增产品的权限
}

// 如果是检查用户的角色role或者拥有的任务task 权限

if (Yii::app()->authManager->isAssigned('admin', Yii::app()->user)) {
// 当前用户拥有角色admin
}



查看完整回答
反对 回复 2018-12-19
  • 1 回答
  • 0 关注
  • 649 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信