请原谅我,我对cakephp还是相当陌生的,并且正在恢复我多余的PhP技能。
我在"互联网"上搜索了所有的答案,遗憾的是无济于事。
场景如下:
我有2个表- 1是用户其他组(权限)。
Users表-非常标准的加上一些额外的配置文件信息。
Groups表-包含管理员、超级用户、授权用户和未授权用户。
Users表用于身份验证和配置文件(其他用户可以浏览用户配置文件)。考虑到这一点,我不知道如何根据用户(而不是当前登录的用户)所属的组来过滤哪些用户被呈现到索引视图中。
例如,admin和Super用户帐户配置文件正在呈现,它们分别属于"Administrators"answers"Super users"组以及所有其他用户。然而,我希望最终用户(认证用户)能够看到其他用户配置文件,这些配置文件是认证用户组的一部分。
因此,如果能挽救我剩下的头发,并找到解决这个问题的办法,我将不胜感激。
这就是我所做的,效果很好。将分页变量配置为如下所示:
var $paginate = array(
'fields' => array(
'User.img_file', 'User.given_name', 'User.family_name', 'Group.name', 'User.username', 'User.created'),
'limit' => 10,
'order' => array(
'User.given_name' => 'asc'
)
);
然后在索引函数(这是我想要的),我添加了以下内容:
function index() {
$this->User->recursive = 0;
$this->paginate = array(
'conditions' => array(
'group_id' => 3
));
$users = $this->paginate('User');
$this->set(compact('users'));
}
它的工作方式就像我想要的,但如果有任何东西看起来畸形,或者这可以扩展,请发表评论
首先,查看下面的信息,了解如何使用cakephp的内置身份验证特性。
"我不知道如何根据用户(而不是当前登录的用户)所属的组来过滤哪些用户呈现到索引视图中。"
不是100%理解您的意思,但是如果您的意思是您只想看到其他管理员用户(并且假设您知道admin_group_id == 1),那么您想要的是以下内容:
$administrator_group_id = 1;
$conditions = array(
'group_id' => "{$administrator_group_id}"
);
$this->data = $this->User->findAll($conditions);
// note. automatically makes the result data available in the VIEW layer
pr($this->data); // VARDUMP utility
(ps。查看如何对结果数据进行分页)
"……我希望最终用户(认证用户)能够看到其他用户配置文件,这些配置文件是认证用户组的一部分"
(假设真实的东西没有帮助你)
(如果只有3种类型的组类型,并且我可以完全控制它们,那么我会考虑不使用组表,而使用枚举。下面是关于如何在MySQL
中执行此操作的注意事项http://dev.mysql.com/doc/refman/5.0/en/enum.html或者,你可以在PHP中破解它
。
define('USER', 1);
define('S_USER', 10);
define('ADMIN', 100);
$user = $this-> user ->findById($my_user_id);//或获取auth
$conditions = array("group_id & lt ;= " => "{$ 用户("用户")("group_id")}"
);$this->data = $this->User->findAll($conditions);公关($ this ->数据);//VARDUMP
(我所做的是您获得登录的用户,并且我确保ADMIN具有最高级别ID。超级用户排名第二,用户排名最低。此查询将返回处于相同级别或低于其自身级别的所有用户。group_id <= User.group_id)
我希望我没有让你太困惑。继续做蛋糕吧。这是值得的!