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、在需要检查权限的地方:
// 如果是检查操作operation
if (Yii::app()->user->checkAccess('productAdd'))
{
// 当前用户拥有新增产品的权限
}
// 如果是检查用户的角色role或者拥有的任务task 权限
if (Yii::app()->authManager->isAssigned('admin', Yii::app()->user)) {
// 当前用户拥有角色admin
}
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
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询