Как преобразовать «пользователей» в accessRules из Yii1 в поведение () в Yii2

У меня есть эти коды в моем Controller.php, когда в Yii:

public function filters()
{
return array('accessControl');
}

public function accessRules()
{
$allAuthUsers = MyAdmin::model()->getAllUsers();

if (empty($allAuthUsers))
$allUsers = array(NULL);

return array(
array('allow',
'users' => $allAuthUsers,
),
array('deny'),
);
}

Но как я могу реализовать это в Yii2, используя поведения () ?

public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'roles' => ['@'],
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['@'],
],
],
],
];
}

Я хотел разместить массив списка определенных пользователей, который разрешает вход в систему.

Может кто-нибудь посоветовать, как я могу сделать то же самое в Yii2, как и в Yii?

1

Решение

Ваша идея не может работать, вы разрешаете только определенным пользователям войти в систему, но вы не знаете, какой пользователь пытается войти в систему, пока они этого не сделают. Поэтому то, что вы пытаетесь достичь, не может работать так, как вы этого хотите, потому что это не имеет смысла.

То, что вы сделали в yii1 — это разрешить доступ к контроллеру (не входу в систему) определенным пользователям. Ваш код все еще не имеет смысла (но он работает), потому что вы на самом деле позволяете всем иметь доступ в любом случае.
Таким образом, ваш точный код может быть написан в yii2

/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout', 'register', 'register-interest', 'forgot-password', 'login-register', 'reset-password', 'auth_login', 'auth_register', 'request-password-reset'],
'rules' => [
[
'actions' => ['register', 'auth_login', 'auth_register', 'register-interest', 'login-register', 'forgot-password', 'reset-password', 'request-password-reset'],
'allow' => true,
'roles' => ['?'],
],
[
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
];
}

Почему вы настаиваете на использовании списка пользователей вместо ролей? Вот официальная документация RBAC https://github.com/yiisoft/yii2/blob/master/docs/guide/security-authorization.md . Идея состоит в том, чтобы разрешить доступ к контроллеру только определенной роли (или ролям), после того как пользователь войдет в систему и назначит ему роль на основе критериев. Вы можете создавать очень сложные роли, но если вы не хотите, вы можете создавать и простые.

Также вы можете взглянуть на это: https://github.com/dektrium/yii2-user с документацией здесь: http://yii2-user.readthedocs.org/en/latest/index.html для вдохновения о том, что вы хотите сделать. Он на самом деле имеет что-то похожее на то, что вы хотите, у него есть список имен пользователей, которые будут администраторами.

1

Другие решения

Используйте эту функцию:

       array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('index','delete','update','approve','unapprove','admin'),
'expression'=>'YourFunc(UserRole::LEVEL_ADMIN)',
),

И в YourFunc(), верните true или false

3

Я пытался с этим. Это работает, но я не уверен, что моя идея / концепция верна.

public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'ruleConfig' => [
'class' => 'app\modules\mymodules\components\MyAccessRule'
],
'rules' => [
[
'allow' => true,
'roles' => ['@'],
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['@'],
],
],
],
];
}

Затем в моем MyAccessRule.php:

protected function matchRole($user)
{
if( !empty($user->identity->username) && (MyAdmin::isAdmin($user->identity->username) )
{

return true;

}

return false;

}

@ Михай П., не могли бы вы посоветовать? Любой может также любезно посоветовать. Благодарю. 🙂

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector