yii 中的访问规则限制
Access rules restriction in yii
在我的帐户模型中,我有一个名为 account_type_id 的属性
注册后,如果用户选择他的帐户作为管理员帐户,则设置为 1,但如果用户只是普通用户,则设置为 2
如何更改访问规则,以便只有设置为 1 的访问规则才能更新或删除?
这是我的代码示例
public function accessRules()
{
$account=Account::model()->FindAll();
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create'),
'users'=>array('@'),
),
array('allow',
'action'=>array('update', 'delete', 'admin'),
'expression'=>"{$account->account_type_id}==1",
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
您可能需要执行类似这样的操作wiki or this one
因此您的访问规则如下所示:
// for access rules
return array(
array('allow',
'actions'=>array('update','delete','admin'),
'expression'=>'$user->isAdmin()'
),
// ...
我认为你的代码有一个问题:你的 $account
是一个对象数组,所以你不能使用 $account->account_type_id
。这没有任何意义。用户 table 应该有一个 account_type_id
字段。因此,您可以在应用程序的任何位置访问已登录用户的 account_type_id。
你可以试试这个:
array('allow',
'action'=>array('update', 'delete', 'admin'),
'expression'=> array('AccessControl','allowAdminOnly'),
),
然后你需要在那个class中定义AccessControl
class和allowAdminOnly
函数。 AccessControl
可以在任何地方,例如在您的扩展文件夹中。注意 allowAdminOnly
缪斯 return 对或错。 AccessControl
应该是这样的:
class AccessControl{
public function allowAdminOnly()
{
if(Yii::app()->user->account_type_id == 1)
return true;
else
return false;
}
}
在我的帐户模型中,我有一个名为 account_type_id 的属性 注册后,如果用户选择他的帐户作为管理员帐户,则设置为 1,但如果用户只是普通用户,则设置为 2 如何更改访问规则,以便只有设置为 1 的访问规则才能更新或删除?
这是我的代码示例
public function accessRules()
{
$account=Account::model()->FindAll();
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create'),
'users'=>array('@'),
),
array('allow',
'action'=>array('update', 'delete', 'admin'),
'expression'=>"{$account->account_type_id}==1",
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
您可能需要执行类似这样的操作wiki or this one
因此您的访问规则如下所示:
// for access rules
return array(
array('allow',
'actions'=>array('update','delete','admin'),
'expression'=>'$user->isAdmin()'
),
// ...
我认为你的代码有一个问题:你的 $account
是一个对象数组,所以你不能使用 $account->account_type_id
。这没有任何意义。用户 table 应该有一个 account_type_id
字段。因此,您可以在应用程序的任何位置访问已登录用户的 account_type_id。
你可以试试这个:
array('allow',
'action'=>array('update', 'delete', 'admin'),
'expression'=> array('AccessControl','allowAdminOnly'),
),
然后你需要在那个class中定义AccessControl
class和allowAdminOnly
函数。 AccessControl
可以在任何地方,例如在您的扩展文件夹中。注意 allowAdminOnly
缪斯 return 对或错。 AccessControl
应该是这样的:
class AccessControl{
public function allowAdminOnly()
{
if(Yii::app()->user->account_type_id == 1)
return true;
else
return false;
}
}