Cakephp中的数据过滤

时间:2011-07-08 04:24:57

标签: php cakephp-1.3

请原谅我,我仍然对cakephp很新,并且正在恢复我多余的PhP技能。

我已经搜遍了“interweb”的答案,遗憾的是无济于事。

以下是该方案:

我有2个表 - 其中1个是其他组的用户(用于权限)。

用户表 - 非常标准,还有一些额外的个人资料信息。

Groups表 - 包含管理员,超级用户,Auth用户和Unauth用户。

Users表用于身份验证和配置文件(其他用户可以浏览用户配置文件)。现在考虑到这一点,我无法弄清楚如何根据用户(而不是当前登录的用户)属于哪个组来过滤掉哪些用户呈现到索引视图中。

例如,管理员和超级用户帐户配置文件正在呈现,并且分别属于“管理员”和“超级用户”组以及所有其他用户。但是,我希望最终用户(Auth用户)能够看到的是其他用户配置文件,这些用户配置文件是Auth Users组的一部分。

所以任何和所有的帮助都会受到赞赏,既可以保留我的头发,又可以解决这个问题。

好的,这就是我所做的工作,就像一个魅力。将paginate变量配置为如下所示:

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'));
}

它的工作方式与我想要的一样,但如果看起来格格不入,或者可以扩展,请发表评论。

1 个答案:

答案 0 :(得分:0)

First off, take a look at this for information on using the built in authentication features of 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。check this out for how to paginate this result data

“...我希望最终用户(Auth用户)能够看到其他用户配置文件是Auth Users组的一部分”

(假设auth的东西没有帮助你。)

(如果只有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< =”=> “{$用户[ '用户'] [ 'GROUP_ID']}” );

$ this-> data = $ this-> User-> findAll($ conditions); PR($这 - >数据); // VARDUMP

(我做的是你得到登录用户,我确保ADMIN具有最高级别的ID。超级用户有第二个,用户最低。这个查询将返回所有用户等级,或低于他们自己的等级.group_id< = User.group_id)

我希望我没有太多困惑你。继续尝试蛋糕。这是值得的!