Cakephp中的数据过滤


Data Filtering in Cakephp

请原谅我,我对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)

我希望我没有让你太困惑。继续做蛋糕吧。这是值得的!