yii проверять подлинность системы на основе групп пользователей вместо ролей
Я пытаюсь построить свою собственную систему аутентификации на этой основе. Я установил RBAC Yii. Работает хорошо. Это дает мне роли. Позже я отредактировал код, и теперь я могу получить идентификатор пользователя, а также имя пользователя. Но то, что я хочу, немного сложнее. Мне не нравится эта система ролей RBAC, потому что у вас есть фиксированные роли, написанные внутри кода.
Моя идея - это пользователь с идентификатором группы. и в базе данных я могу манипулировать тем, что может делать каждая группа пользователей.
Так, например, пользователь входит в систему и хочет создать новую тему, в то время как для аутентификации RBAC использует идентификатор группы пользователей для подключения к базе данных и получения всех данных в соответствии с этой группой пользователей. тогда это создает что-то вроде:
$this->setState('create_new_topoic', <info from database);
$this->setState('edit_topic', <info from database);
$this->setState('view_topic'', <info from database);
А потом во время применения в контроллерах и представлениях я буду просто везде использовать
if (isset(Yii::app()->user->create_new_topoic) AND (Yii::app()->user->create_new_topoic>0))
{ show 'create new topic button' }
Это нормальная практика? Меня интересует, как это отреагирует на загрузку сервера и MYSQL. Я перегружаю свое приложение или такая система подходит для сервера?
2 ответа
То, что вы хотите, это то, что именно RBAC может сделать. На самом деле, вы даете ROLE
пользователю вместо группы. Идея заключается в следующем:
- Создайте ваши операции (например, создать / обновить)
- Создавайте соответствующие роли на основе ваших операций (например, Модификатор, который может выполнять создание и обновление)
- Назначьте пользователям одну или несколько соответствующих ролей
- Где / когда вы можете легко проверить доступ ваших пользователей по их ролям
Говорить в коде:
$rbac=Yii::app()->CAuthManager();
$rbac->createOperation('create','This is a description for this operation')
$rbac->createRole('modifier','This is a description for this role')
$rbac->assign('modifier','USER_ID')
$rbac->checkAccess('modifier')
Пожалуйста, не ограничивайте себя методами RBAC, предоставляемыми Yii. Вы можете делать любые манипуляции в вашей базе данных и писать свои собственные методы. (Я имею в виду, когда вы используете rbac, вы можете настроить способ его использования. Например, рассматривая группы как роли)
Чтобы быть более понятным, вы можете прочитать документ RBAC от Yii:
RBAC работает просто отлично. Другой метод: 1) Назначение типа пользователя переменной сеанса во время входа в систему. 2) Проверка типа пользователя в представлении. Для пользовательской таблицы явно нужен столбец User Type. Я думаю, что такой подход хорош, и он не будет перегружать ваш сервер. Конечно, это добавит несколько миллисекунд, но это необходимо, если вы хотите, чтобы одно и то же представление отображало разные вещи в зависимости от роли.
В вашем файле UserIdentity (/protected/ компоненты)
public function authenticate()
{
....
$this->setState('type', $user->type); //Set's Type here
$user->save();
....
}
В ваших взглядах / контроллерах
<?php if (Yii::app()->user->type == 'Finance') : ?>
{some code}
<?php else: ?>
{other code}