【发布时间】:2014-10-15 09:48:40
【问题描述】:
我已经在 yii 中安装了权限模块。我还创建了用户角色和操作。但它不起作用。我想知道在哪里为角色创建用户?
【问题讨论】:
标签: yii yii-extensions
我已经在 yii 中安装了权限模块。我还创建了用户角色和操作。但它不起作用。我想知道在哪里为角色创建用户?
【问题讨论】:
标签: yii yii-extensions
根据您的风格,只需粘贴此“用户/管理员/创建”。
look like http://url/index.php?r=user/admin/create
现在在查看页面上,您可以使用
获取数据库的所有角色$all_roles=new RAuthItemDataProvider('roles', array(
'type'=>2,
));
$data=$all_roles->fetchData();
然后使用它创建一个下拉列表。你可以根据你的角色创建用户
<div>
<label for="type_id">Type</label>
<?php echo CHtml::dropDownList("Type",'',CHtml::listData($data,'name','name'));? >
</div>
并在你的控制器中分配它
$authorizer = Yii::app()->getModule("rights")->authorizer;
$authorizer->authManager->assign($type, $model->id);
【讨论】:
您为用户创建角色,反之亦然(或者至少这是我的方法,如果您想与之合并)。
角色可以看这个问题:redirect Access rules with Yii
最好的方法是使用在 Yii 框架中定义的 CAccessControlFilter 类,并通过你的角色/授予访问类来扩展它。
您的 preFilter 方法将如下所示:
protected function preFilter($filterChain)
{
$app=Yii::app();
$request=$app->getRequest();
$user=$app->getUser();
$verb=$request->getRequestType();
$ip=$request->getUserHostAddress();
foreach($this->getRules() as $rule)
{
if(($allow=$rule->isUserAllowed($user,$filterChain->controller,$filterChain->action,$ip,$verb))>0) // allowed
break;
elseif($allow<0) // denied
{
if(isset($rule->deniedCallback))
call_user_func($rule->deniedCallback, $rule);
else
$this->accessDenied($user,$this->resolveErrorMessage($rule));
return false;
}
}
return true;
}
您的 WebUser 类将如下所示:
class WebUser extends CWebUser {
// Store model to not repeat query.
private $_model;
// access it by Yii::app()->user->name
function getName(){
$user = $this->loadUser(Yii::app()->user->id);
return $user['Name'];
}
// access it by Yii::app()->user->isAdmin()
function isAdmin(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user['Type']) == 4;
}
function isEditor(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user['Type']) == 3;
}
function isOrganizer(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user['Type']) == 2;
}
function isNormal(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user['Type']) == 1;
}
// Load user model.
protected function loadUser($id=null)
{
if($this->_model===null)
{
if($id!==null)
$this->_model=User::model()->findByPk($id);
}
return $this->_model;
}
}
我在我的一个大学项目中成功使用了它https://github.com/RazvanADumitru/EventsPlanning
【讨论】: