CakePHP аутентифицирует ACL

#cakephp #acl #authentication

#cakephp #acl #аутентификация

Вопрос:

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

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

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

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

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

Пользователь класса модели

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

Группа классов модели

 <?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) 
?>
  

Ответ №1:

и разрабатывать,

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

Слова поддержки: Если вы внимательно прочтете руководство, у вас все получится. Просто попробуйте это из новой среды CakePHP.

Ответ №2:

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

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