CakePHP Auth ACL

Я начал с CakePHP и просто хочу работать со списком контроля доступа (ACL)

Я нашел учебник, но не могу с ним работать.
Мне нужны две группы с отдельными разрешениями .

Администраторы могут регистрировать новых пользователей. Пользователи могут только войти в систему и увидеть свои профили.

Я думаю, что это действительно просто, но я не могу понять логику ..
Я надеюсь, что вы можете мне помочь, это действительно расстраивает ..: P

База данных идентификатор пользователя - основное имя пользователя - уникальный пароль group_id идентификатор группы - основное имя - уникальный

Класс модели USER

<?php  
class User extends AppModel { 
    var $name = 'User'; 
    var $displayField = 'username'; 
    var $belongsTo = array( 
        'Group' => array( 
            'className' => 'Group', 
            'foreignKey' => 'group_id' 
        ) 
    ); 
} 
?>

Модельный класс GROUP

<?php  
class Group extends AppModel { 
    var $name = 'Group'; 
    var $displayField = 'name'; 

    var $hasMany = array( 
        'User' => array( 
            'className' => 'User', 
            'foreignKey' => 'group_id', 
            'dependent' => false 
        ) 
    ); 

} 
?>

Класс контроллера AppController

<?php  
class AppController extends Controller { 

    var $components = array('Auth', 'RequestHandler');  
    var $permissions = array(); 

    function beforeFilter() { 
        $this->Auth->fields  = array( 
            'username'=>'username', //The field the user logs in with (eg. username) 
            'password' =>'password' //The password field 
        ); 
        $this->Auth->authorize = 'controller'; 
        $this->Auth->autoRedirect = false; 
        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
        $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); 
        $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'welcome'); 

    } 

    function isAuthorized(){ 
        if($this->Auth->user('group') == 'admin') return true; //Remove this line if you don't want admins to have access to everything by default
        if(!empty($this->permissions[$this->action])){ 
            if($this->permissions[$this->action] == '*') return true; 
            if(in_array($this->Auth->user('group'), $this->permissions[$this->action])) return true; 
        } 
        return false; 

    } 

} 
?>

Класс контроллера UsersController

<?php  
class UsersController extends AppController { 

    var $name = 'Users'; 
    var $helpers = array('Html', 'Form'); 
    var $permissions = array( 
        'logout' => '*', 
        'welcome' => '*' 
    ); 

    function welcome(){ 
    } 

    function login(){ 
        if($this->Auth->user()){ 
            $this->Session->write('Auth.User.group', $this->User->Group->field('name',array('id' => $this->Auth->user('group_id')))); 
            $this->redirect($this->Auth->redirect()); 
        } 
    } 

    function logout(){ 
        $this->redirect($this->Auth->logout()); 
    } 

    function registerusers(){
   //  Only for administrators.. how can I set this permission?
    }

    // Add whatever user logic methods you'd like here as well (eg. add/edit/delete users) 
?>

person anddevelop    schedule 07.04.2011    source источник


Ответы (2)


и развиваться,

из беглого обзора я бы сказал, что вы перепутали, например $actsAs отсутствует, и добавлены некоторые другие вещи. Вам следует просмотреть официальное руководство здесь, как это доставляет то, о чем вы просите.

Ободряющие слова: если вы внимательно перешагнете через учебник, у вас все получится. Просто попробуйте его в свежей среде CakePHP.

person benjamin    schedule 07.04.2011

Вы создали таблицы ACL (aros и acos) в соответствии с инструкциями в Руководство по CakePHP?

Если вы последуете этому руководству, вы увидите, что вам нужно для настройки правильной структуры, чтобы определить, какое действие может быть выполнено какими пользователями (или группами).

person vindia    schedule 07.04.2011