假设您有一个包含一组记录的Active Record模型:
id | name
---------
1 | Record1
2 | Record2
3 | Record3
拥有查看每条记录权限的用户以逗号分隔的方式使用外键表示记录存储在另一个表中:
foreignId | users
-----------------
1 | joe, doe, zoe
2 | joe
3 | doe, zoe
有一个身份验证管理器bizRule,用于检查当前用户是否具有查看记录的权限。您为其提供记录ID,并检查权限表以查看用户是否在逗号分隔字段中。
Yii::app()->authManager->checkAccess('seeRecord', $id);
使用CActiveRecord传递PHP表达式“查询”有一种简单的方法吗?类似的东西:
Record::model()->findByPHPExpression('Yii::app()->authManager->checkAccess('seeRecord', array('id' => 'id'));
如果表达式对当前记录返回true,则会添加该记录。
谢谢
答案 0 :(得分:4)
您有一些严重的非yii相关问题,您的数据库架构有误,请阅读一些关于database normalization的内容。
你应该有一个中间表,如果用户可以看到各种记录,并且各种用户都可以看到记录,那么你需要一个中间表。
用户,用户_cansee_Records,记录
中间表将有2个主键,分别是user_id和record_id
对于您的示例,此表将具有以下内容:
user | record
--------------
1 | joe
1 | doe
1 | zoe
2 | joe
3 | doe
3 | zoe
Yii支持开箱即用的“许多”关系。但请阅读数据库规范化,这是一个重要的主题,数据库设计是任何项目开发中的关键步骤。