Yii: найти в активной записи с помощью выражения PHP - PullRequest
0 голосов
/ 21 ноября 2011

Скажем, у вас есть модель Active Record, которая содержит набор записей:

id | name
---------
1 | Record1
2 | Record2
3 | Record3

Пользователи, имеющие разрешение на просмотр каждой записи, хранятся в другой таблице, используя внешний ключ для представления записи, через запятую:

foreignId | users
-----------------
1         | joe, doe, zoe
2         | joe
3         | doe, zoe

Существует менеджер аутентификации bizRule, который проверяет, есть ли у текущего пользователя разрешение на просмотр записи. Вы даете ему идентификатор записи, и он проверяет таблицу разрешений, чтобы увидеть, находится ли пользователь в поле, разделенном запятыми.

Yii::app()->authManager->checkAccess('seeRecord', $id);

Есть ли простой способ с помощью CActiveRecord передать "запрос" PHP-выражения? Что-то вроде:

Record::model()->findByPHPExpression('Yii::app()->authManager->checkAccess('seeRecord', array('id' => 'id'));

Если выражение возвращает true для текущей записи, эта запись будет добавлена.

Спасибо

1 Ответ

4 голосов
/ 21 ноября 2011

У вас есть серьезная проблема, не связанная с yii, ваша схема базы данных неверна, пожалуйста, прочитайте немного о нормализации базы данных .

У вас должна быть промежуточная таблица, если пользователь может видетьразличные записи, и запись может просматриваться разными пользователями, тогда вам нужна промежуточная таблица.

Users, Users_cansee_Records, Records

В промежуточной таблице будет 2 первичных ключа, которые являются user_idи record_id соответственно

для вашего примера эта таблица будет иметь что-то вроде:

user | record
--------------
1 | joe
1 | doe
1 | zoe
2 | joe
3 | doe
3 | zoe

Yii поддерживает это «много-много» отношений из коробки.но, пожалуйста, прочитайте о нормализации базы данных, это важная тема, дизайн базы данных является критически важным шагом в любой разработке проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...