2010-08-05 68 views
1

任何人都可以解釋我的工作Auth->authorize = "actions"
在我的項目中,我正在計劃給這個。
由於this授課我會授權給我打電話$this->Aro->check($user,"controllers/:controller/:action")檢查權限對組非用戶使用Auth-> authorize =「操作」

這樣會檢查對用戶的權利嗎?
這意味着用戶應該在aros表中。
但我不需要這樣來檢查用戶,但我需要檢查一組
我該如何執行此操作。

現在,當用戶不在阿羅表它顯示

使得阿羅的將是唯一的組和用戶添加到阿羅斯需要

thankz提前

回答

1

得到使用該溶液
reference
我延長AuthComponent到CustomAuth和重寫的isAutorized()方法在AuthComponent如下

在控制器/組件/ custom_auth.php

<?php 
App::import('Component','Auth'); 
class CustomAuthComponent extends AuthComponent { 

    public function isAuthorized($type = null, $object = null, $user = null) { 

     $actions = $this->__authType($type); 
     if($actions['type'] != 'actions'){ 
      return parent::isAuthorized($type, $object, $user); 
     } 
     if (empty($user) && !$this->user()) { 
      return false; 
     } elseif (empty($user)) { 
      $user = $this->user(); 
     } 


     $group = array('model' => 'Group','foreign_key' =>$user['Login']['group_id']); 
     $valid = $this->Acl->check($group, $this->action()); 
     return $valid; 
    } 
} 
?> 

在APP_

Controller.php這樣

function beforeFilter() 
{ 
$this->CustomAuth->userModel = 'Login'; 
$this->CustomAuth->allowedActions = array('display'); 
$this->CustomAuth->actionPath = 'controllers/'; 
$this->CustomAuth->authorize = 'actions'; 
} 

這解決了我的問題:)

0

取看看這個chapter。要檢查組權限做到這一點(「模型」和「foreign_key」的值從阿羅斯表):

$this->Acl->check(
    array('model' => 'Group', 'foreign_key' => 2), 
    'controller/action' 
); 
+0

但由於Auth->授權=「行動」中給出的檢查將完成全自動吧? – RSK 2010-08-05 18:44:08

+1

沒錯。您需要使用'$ this-> Auth-> authorize ='controller';'和'isAuthorized()'方法(http://book.cakephp.org/view/396/authorize)。 – bancer 2010-08-05 23:13:17

+0

,但是如果我給'$ this-> Auth-> authorize ='controller';'我需要轉到每個控制器並重寫'isAuthorized()'。我怎樣才能避免在每個控制器這個重寫? – RSK 2010-08-07 05:22:21