1

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

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

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

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

2 回答 2

1

在 beforeRender() 或 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() 方法。

这样做有很多好处,它很容易重用、重载和适应你的检查,而且你不会在视图中使用组件,而且你应该避免在你的应用程序中大量调用静态和单例。此外,它很容易阅读和理解代码的作用。

于 2013-08-26T13:02:24.853 回答
0

I think the good idea is set some variable or constans after logged (if user has privileges) and uses if statement for check.

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

or use AuthComponent::user() in Views.

This idea it's not good if we can many kind of admins (admin, moderator, reviewier, etc.) Maybe someone will have a better solution

于 2013-08-26T12:32:36.570 回答