如果依赖于用户权限,请查看链接

时间:2013-08-26 12:00:00

标签: cakephp

我正在使用CakePhp 2.x.我有三个专栏:

用户|课程| UserCourseRole

每个用户都可以编辑多个课程,多个用户可以编辑一个课程。到目前为止一切都很好。

如果用户希望查看所有课程的索引我想在他实际编辑的课程旁边显示“编辑”链接。 我怎么能意识到这一点?我想我必须在CourseController中设置一些额外的字段并检查视图中的这个字段。这是正确的方法吗?

我目前的代码是

CourseController.php

...
public function index() {
        $courses = $this->Course->find('all', array('recursive' => 2));

         $this->set('courses', $courses);
    }
...

课程/ index.ctp

<!-- File: /app/View/Courses/index.ctp -->
...
<?php foreach ($courses as $course):?>
    ...
    <?php 
        echo $this->Html->link('edit', array('action' => 'edit', $course['Course']['id']));     
   ?>
   ...

2 个答案:

答案 0 :(得分:1)

在beforeRender()或beforeFilter()中,将$ this-&gt; Auth-&gt; user()设置为视图的变量,例如userData。

$this->set('userData', $this->Auth->user());

实现一个使用该变量的(auth)帮助器(您可以将其配置为辅助设置)并执行以下检查:

if ($this->Auth->hasRole($course['Course']['role']) { /* ... */ }
if ($this->Auth->isLoggedIn() { /* ... */ }
if ($this->Auth->isMe($course['Course']['user_id']) { /* ... */ }

根据您的具体要求实施hasRole()方法。

将此作为帮助,因为它有很多优点,它很容易重用,重载并适应你的任何检查,你不在视图中使用组件加上你应该避免在很多时候调用静态和单例你的应用。此外,它很容易阅读并理解代码的作用。

答案 1 :(得分:0)

我认为好的想法是在记录后设置一些变量或常量(如果用户有权限)并使用if语句进行检查。

if($allow === true) {  
     echo $html->link('Edit',...
}

或在Views中使用AuthComponent :: user()。

如果我们能有多种管理员(管理员,主持人,评论员等),这个想法就不好了。 也许有人会有更好的解决方案