В чем причина наличия правил авторизации в базе данных? - PullRequest
10 голосов
/ 07 марта 2012

В моем приложении Yii я хочу, чтобы моя иерархия авторизации и бизнес-правила были записаны в коде, и я хочу, чтобы мои пользователи, роли и разрешения сохранялись в базе данных.Это отделяет мою бизнес-логику (которая должна быть кодом) от информации, которую она должна использовать (которая должна быть данными).Похоже, что Yii не поддерживает это.

В Yii у вас есть возможность поместить свою бизнес-логику в файлы (CPhpAuthManager) или в базу данных (CdbAuthManager).В любом случае, вы рассматриваете свою бизнес-логику как данные;Yii на самом деле извлекает вашу бизнес-логику в виде строк и затем запускает ее через eval, что кажется ужасным способом сделать это.

В чем причина?

Как можноЯ достигаю желаемого результата?

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Вы можете добавить столько логики, сколько захотите, в свой PHP-код для своей бизнес-логики. Yii поддерживает множество способов добавления этой логики, например. LoginForm.php, UserIdentity.php, SiteController.php, ... вы не ограничены здесь.

Yii также поддерживает добавление фрагмента логики в ваш RBAC. Обычный вариант использования заключается в том, что вы назначаете два правила «Аутентифицированный» и «Гость» всем пользователям вашего сайта по умолчанию, но с помощью bizRules. В то время как «Аутентифицированный» имеет bizRule вроде

return !Yii::app()->user->isGuest;

Гость имеет

return Yii::app()->user->isGuest;

В результате ваши вошедшие в систему пользователи уже не «Гости», а «Прошедшие проверку». Другим примером может быть редактирование представлений для профилей пользователей, которые могут редактироваться только текущим пользователем, например

return $model->id === Yii::app()->user->id;
1 голос
/ 25 апреля 2012

Зачем вы помещаете что-либо в базу данных против кода?

Одна веская причина в том, что не разработчики могут редактировать это.

В нашем приложении мы позволяем пользователям управлять своими разрешениями для своих пользователей и элементов.

Вам не нужно использовать бизнес-правила yii rbac.Вы можете разрешить сказать несколько разных ролей и задач, а остальную логику аутентификации использовать в коде.

...