проверьте разрешение группы, а не пользователей, используя Auth-> authorize = "actions" - PullRequest
1 голос
/ 05 августа 2010

Может кто-нибудь объяснить мне работу Auth->authorize = "actions"
В моем проекте я планирую дать это.
Как это научило меня, авторизация назовет $this->Aro->check($user,"controllers/:controller/:action")

Это проверяет права пользователя ??
это означает, что пользователь должен быть там в таблице aros.
Но мне не нужно это проверять в отношении пользователя, но мне нужно проверять в группе
Как я могу достичь этого.

теперь, когда пользователей нет в таблице Aro, отображается

Чтобы Aro были только группами, и добавление пользователей в Aros необходимо

благодарю заранее

Ответы [ 2 ]

1 голос
/ 07 августа 2010

Получил решение
, используя эту ссылку
Я расширил 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 голосов
/ 05 августа 2010

Взгляните на эту главу . Чтобы проверить разрешение группы, сделайте это (значения 'model' и 'foreign_key' взяты из таблицы aros):

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