В Yii2 права доступа для каждого пользователя можно настроить с помощью концепции "ролей" и "правил доступа". Роли определяют набор разрешений, которые могут быть присвоены пользователям, а правила доступа определяют, какие действия пользователя могут выполнять в соответствии с его ролью.
Для создания более гибких прав доступа для каждого пользователя в Yii2, вам необходимо выполнить следующие шаги:
1. Создайте таблицу в базе данных для хранения ролей и разрешений. Пример таблицы может выглядеть следующим образом:
CREATE TABLE roles ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT ); CREATE TABLE permissions ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT ); CREATE TABLE role_permission ( role_id INT, permission_id INT, FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE, FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE, PRIMARY KEY (role_id, permission_id) );
2. Создайте модели Role и Permission с соответствующими правилами валидации (например, проверка на уникальное имя роли или разрешения).
3. Создайте связь между моделями Role и Permission с помощью метода hasMany()
и viaTable()
:
public function getPermissions() { return $this->hasMany(Permission::class, ['id' => 'permission_id']) ->viaTable('role_permission', ['role_id' => 'id']); }
4. Создайте модель User и добавьте методы, использующие роли и разрешения:
public function getRoles() { return $this->hasMany(Role::class, ['id' => 'role_id']) ->viaTable('user_role', ['user_id' => 'id']); } public function hasPermission($permissionName) { foreach ($this->roles as $role) { if ($role->getPermissions()->where(['name' => $permissionName])->exists()) { return true; } } return false; }
5. Используйте метод hasPermission()
в контроллерах или представлениях для проверки разрешений пользователя:
if (Yii::$app->user->identity->hasPermission('createPost')) { // выполнение действий доступных только пользователям с разрешением 'createPost' }
6. Добавьте формы и маршруты для управления ролями и разрешениями в административном интерфейсе вашего приложения.
Надеюсь, это руководство поможет вам создать более гибкие права доступа для каждого пользователя в Yii2.