查看链接(如果依赖于用户权限)



我正在使用CakePhp 2.x。我有三列:

用户|课程|用户课程角色

每个用户可以编辑多个课程,一个课程可以由多个用户编辑。到目前为止还不错。

如果用户想查看所有课程的索引,我只想在他实际上可以编辑的课程旁边显示一个"编辑"链接我怎么能意识到这一点?我想我必须在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']));     
   ?>
   ...

在beforeEnd()或beforeFilter()中,将$this->Auth->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()方法。

作为助手这样做有很多优点,它很容易重用、重载和适应您的检查,而且您不在视图中使用组件,此外,您应该避免在应用程序中多次调用statics和singleton。此外,阅读和理解代码的作用也非常容易。

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

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

或在视图中使用AuthComponent::user()。

这个想法是不好的,如果我们可以有很多类型的管理员(管理员,主持人,审查员,等等)也许有人会有更好的解决方案

最新更新