YII权限判断?

怎么判断当前登录用户是不是管理员?... 怎么判断当前登录用户是不是管理员? 展开
 我来答
Kiss錵錵
2015-07-14 · TA获得超过957个赞
知道小有建树答主
回答量:523
采纳率:40%
帮助的人:250万
展开全部
可以用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
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式