Я разрабатываю веб-приложения с использованием Yii 1.1.14 до сих пор, но теперь настало время для обновления.
Компания, в которой я работаю, разработала собственную систему контроля доступа, и с ней все было в порядке, пока я не увидел, что это было на самом деле... Комбинация из 8 таблиц в базе данных (не считая таблицы пользователей) с кучей внешних ключей.
- 1 таблица для контроллеров
- 1 таблица действий
- 1 таблица для категорий меню
- 1 таблица для типов пользователей
- И другие таблицы в основном просто соединяют 2 или 3 из этих таблиц за раз.
Это хорошо работает, но, с моей точки зрения, очень много времени для поддержания всех этих таблиц, и в какой-то момент, когда ваше приложение выходит в интернет, если оно попадает на определенное количество пользователей, оно может стать очень медленным. особенно потому, что 2 из этих таблиц имеют первичный ключ таблицы пользователя в качестве внешнего ключа.
Итак, я решил, что, когда я начну разработку на Yii 2, я собираюсь начать использовать RBAC, поэтому начал искать учебники онлайн... Только нахождение множества разных версий одного и того же кода с ролью автора, и разрешения для создания или обновления сообщений.
Я нашел комбинацию из 5 видео на Youtube, но они касаются Yii 1 RBAC. Они были полезны, потому что мне удалось понять большинство функциональных возможностей RBAC, но у меня все еще есть некоторые сомнения в том, что я буду перечислите ниже. И имейте в виду, что для этой системы контроля доступа я использую класс DBManager.
Мои сомнения
-
Yii 1 RBAC имел 3 таблицы:
auth_assignment
,auth_item
иauth_item_child
. Теперь в Yii 2 RBAC появляется новая таблица, которая называетсяauth_rule
, и я до сих пор не понимаю, что делает эта конкретная таблица, как ее использовать или как ее заполнять. -
Я вижу, что можно ограничить доступ пользователей к некоторым действиям с помощью метода поведения контроллера и назначить доступ к некоторым действиям в зависимости от роли пользователя, но когда дело доходит до этого, я должен разделить мой вопрос в 2:
2,1. Сначала:. Если вы можете просто ограничить доступ к действиям, настроив его в методе поведения, то, что использование разрешений на сохранение в таблице
auth_item
?2,2. Вторые: Если вы решили контролировать доступ в соответствии с разрешениями, то как именно вы это делаете, потому что я нахожу, что я пишу следующий код внутри каждой функции, и я не думаю, что использование RBAC предполагается, что это утомительно. Должен быть другой способ.
public function actionView($id) { if(Yii::$app->user->can('view-users')){ return $this->render('view', [ 'model' => $this->findModel($id), ]); }else{ #Redirect to a custom made action that will show a view #with a custom error message $this->redirect(['//site/notauthorized']); } }
-
Из-за системы контроля доступа, которую мы используем прямо сейчас, когда пользователь входит в систему, выполняется сложный запрос, который в конечном итоге возвращает массив, который будет сохранен как переменная сеанса, и будет использоваться для создайте меню с таким количеством списков dropdownlists, что и категории меню, к которым принадлежат контроллеры, к которым пользователь имеет доступ. Как это можно сделать с RBAC?