ACF: фильтр контроля доступа Фильтр контроля доступа (ACF) – это простой метод авторизации, реализованный классом yiifiltersaccesscontrol. Представьте его использование:
public function behaviors()
{
return [
'access' => [
'class' => yii\filters\AccessControl::className(),
'rules' => [
[
'allow' => true,
'actions' => ['create', 'update', 'view', 'delete'],
'roles' => ['@'],
],
[
'allow' => true,
'actions' => ['index'],
'roles' => ['?'],
],
],
],
];
}- правила:массив списка объектов правил доступа или массивов конфигурации для создания объектов правил.
- Если правило задано с помощью массива конфигурации, оно сначала будет объединено с [[конфигурация правила]]
- прежде чем он будет использован для создания объекта правила.
- Разрешить всем посетителям (пользователям, еще не прошедшим проверку подлинности) выполнять операции с индексами. Опция роли содержит знак вопроса? Который является специальным идентификатором, представляющим “гостя пользователя”.
- Разрешить пользователям, прошедшим проверку, выполнять операцию “создать обновление” и “удалить”. @- это еще один специальный идентификатор, представляющий аутентифицированного пользователя.
Управление доступом на основе ролей (RBAC) Просто вводит использование базы данных для хранения авторизованных данных, добавляет конфигурацию компонентов в веб-файл конфигурации. php:
'components' => [
......
'authManager' => [
'class' => 'yii\rbac\DbManager',
'itemTable' => 'auth_item',
'assignmentTable' => 'auth_assignment',
'itemChildTable' => 'auth_item_child',
],
]Dbmanager использует четыре таблицы базы данных для хранения своих данных:
Yii rbac dbmanager:: $таблица элементов: в этой таблице содержатся записи авторизации. Имя таблицы по умолчанию – “auth item”. Yii rbac dbmanager:: $itemchildtable: в этой таблице содержатся иерархические отношения записей авторизации. Имя таблицы по умолчанию – “authitemchild”. Yii rbac dbmanager:: $таблица назначений: в этой таблице хранится назначение записей авторизации пользователям. Имя таблицы по умолчанию – “аутентификация и назначение”. Yii rbac dbmanager:: $таблица правил: в этой таблице содержатся правила. Имя таблицы по умолчанию – “правило автора”.
Вам необходимо создать эти таблицы в базе данных. Вы можете сделать это с помощью файлов миграции базы данных, хранящихся в каталоге @ Yii/RBAC/миграции. Этапы авторизации следующие:
Определение ролей и разрешений
Установите взаимосвязь между ролями и правилами определения разрешений Свяжите правила с ролями и разрешениями Назначьте роли пользователям
Конкретная реализация заключается в следующем:
public function actionAccess()
{
$auth = Yii::$app->authManager;
//Create agent permissions
$agentPermission = $auth->createPermission('agent');
$agentPermission->description = 'create agent operate permission.';
$auth->add($agentPermission);
//Create admin role
$adminRole = $auth->createRole('admin');
$adminRole->description = 'create admin role.';
$auth->add($adminRole);
//Assign permissions to roles
$auth->addChild($adminRole, $agentPermission);
//Assign roles to users
$userId = 1;
$auth->assign($adminRole, $userId);
}После авторизации может быть выполнено решение органа власти до выполнения запроса контроллера. Следующим образом:
public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}
if (Yii::$app->user->can(Yii::$app->controller->id)) {
return true;
}
Throw new \ Yii \ web \ unauthorized httpexception ('No permission to view ');
}Yii::$app->user->can($permissionName) Pass in the name of the permission, Yii will automatically judge whether the current user has this permission, and return true or false. If it is true, you can continue to execute the requested method. If it is false, we can do some interceptions, such as throwing an exception directly.