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 пользователю вместо группы. Идея заключается в следующем:

  1. Создайте ваши операции (например, создать / обновить)
  2. Создавайте соответствующие роли на основе ваших операций (например, Модификатор, который может выполнять создание и обновление)
  3. Назначьте пользователям одну или несколько соответствующих ролей
  4. Где / когда вы можете легко проверить доступ ваших пользователей по их ролям

Говорить в коде:

$rbac=Yii::app()->CAuthManager();
  1. $rbac->createOperation('create','This is a description for this operation')
  2. $rbac->createRole('modifier','This is a description for this role')
  3. $rbac->assign('modifier','USER_ID')
  4. $rbac->checkAccess('modifier')

Пожалуйста, не ограничивайте себя методами RBAC, предоставляемыми Yii. Вы можете делать любые манипуляции в вашей базе данных и писать свои собственные методы. (Я имею в виду, когда вы используете rbac, вы можете настроить способ его использования. Например, рассматривая группы как роли)

Чтобы быть более понятным, вы можете прочитать документ RBAC от Yii:

Yii's IAuthManager - RBAC

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}
Другие вопросы по тегам