在cakephp中记录级别的访问

安奇

我想基于登录查看记录的用户来限制记录。

例如,我有以下两个模型:

Assignments
Users

因此,如果学生(用户)正在查看作业摘要,则他应该只能看到他的作业,并且只能执行查看/删除/编辑他的作业。

但是,如果教师(用户)正在查看作业摘要,则他应该看到所有作业,并且可以对所有作业执行添加/编辑/删除。

我已经知道我可以通过将组条件放在“查找”中,然后在视图/编辑/删除操作中适当使用代码来做到这一点。

我的问题是-在cakephp中处理此类情况的最佳方法是什么?对我来说,把条件放到任何地方似乎都不是好方法。

AD7six

考虑作为两个独立的问题来解决

访问控制

第一个是如何拒绝学生,例如仅仅操纵url试图查看/编辑/删除他们不拥有的东西的学生。对于isAuthorized的使用,书中有一个示例,该示例适用于问题中的信息,该示例为:

// app/Controller/AppController.php

public $components = array(
    'Session',
    'Auth' => array(
        'authorize' => array('Controller') // Added this line
    )
);

public function isAuthorized($user) {
    // Teachers can access/do everything - adapt to whatever identifies a teacher
    if ($user['is_teacher'])) {
        return true;
    }

    // Anyone logged in can access the index
    if ($this->action === 'index') { 
        return true;
    } 

    // The owner of a whatever can view, edit and delete it
    $id = $this->request->params['pass'][0];
    $owner = $this->{$this->modelClass}->field('user_id', array('id' => $id));
    if ($owner === $user['id'])) {
        return true;
    }

    // Default deny
    return false;
}

限制学生数据

从2.1开始可用的事件系统是实施上述数据限制的一种简便方法。再次在书中有一个相关示例,它适合于问题中的信息,该示例为:

// app/Controller/AssignmentsController.php

public function beforeFilter() {
    if (!$this->Auth->user('is_teacher')) {
        $currentUser = $this->Auth->user('id');
        $this->Assignment->getEventManager()->attach(
            function(CakeEvent $e) use ($currentUser) {
                $e->data[0]['conditions']['user_id'] = $currentUser;
                return $e->data[0];
            },
            'Model.beforeFind'
        );
    }
}

这将为user_id所有查找添加条件,因此索引列表将仅显示他们自己的作业,而对于教师,它将显示所有作业。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在golang中实现基于级别的日志记录?

使用 Android 在 Firebase 中访问相同级别的数据

具有默认(包)访问级别的类中的方法的默认(包)和公共访问级别之间是否有区别?

关于继承和访问级别的困惑

访问函数不同级别的变量

不同级别的方法访问

在Winston日志记录模块中,为什么发送不同级别的日志不起作用

适用于python中每个日志记录级别的文档

如何在NLog中打开和关闭特定级别的日志记录

Couchbase中是否有任何文档/记录级别的安全性?

Power BI - 比较行级别的数据并连接其他列中相同记录的相应数据

限制团队用户级别的访问权限,以在Visual Studio Online中编辑积压面板

有没有办法在控制器级别的@PreAuthorize批注中访问PathVariable?

Python unittest中的测试如何获得详细级别的访问权限?

使用Ansible Python API,如何在代码中访问任务级别的输出?

如何在忽略一个级别的同时访问pandas multiindex中的对象

如何在flutter中访问与当前小部件具有相同级别的小部件?

在熊猫数据框中访问内部多索引级别的最后一个元素

如何仅记录特定级别的python日志记录

如果RBAC权限允许AD组级别的访问,如何限制用户访问Data Lake中的文件夹的权限?

我在 sql server 中限制了表级别的选择访问。但是用户可以访问在该表顶部创建的视图

CakePHP Tree行为-查找特定级别的元素

如果 salesforce 中有多个经理,则将记录级别的访问权限限制为经理与其下属之间的相互访问

使用java.util.logging API将不同级别的日志记录到单独的文件中

想要在对 RTF BI PUBLISHER 中的记录执行 for 循环时打印相同级别的标签?

Python:更改日志记录级别的数值

MS Access-记录级别的安全性

熊猫:获取记录级别的排序值的列名

Monolog-仅记录特定级别的错误