2013-08-26 47 views
1

我正在使用CakePhp 2.x.我有三個列:查看鏈接是否依賴於用戶權利

用戶|課程| UserCourse角色

每個用戶可以編輯多個課程,一個課程可以由多個用戶編輯。到現在爲止還挺好。

如果用戶想要查看所有課程的索引我想在他實際上可以編輯的課程旁邊顯示「編輯」鏈接。 我怎麼能認識到這一點?我想我將不得不在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']));  
    ?> 
    ... 
+0

[本教程](http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html)在接近尾聲時有一些例子。 – Blazemonger

回答

0

我覺得好主意,設置一些變量或登錄CONSTANS後(如果用戶有特權)並使用if語句進行檢查。

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

或在視圖中使用AuthComponent :: user()。

這個想法是不是很好,如果我們可以在許多類型的管理員(管理員,版主,reviewier等)的 也許有人會有一個更好的解決方案

1

在beforeRender()或beforeFilter()設置$這個 - > 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()方法你的具體要求是。

作爲幫助器,作爲一組優勢,很容易重用,重載和適應任何檢查,並且不在視圖中使用組件,而且應該避免大量調用靜態和單例在你的應用程序。閱讀和理解代碼的功能也很容易。

+0

我應該在視圖內進行檢查嗎? – alex