나중에 참조할 수 있도록 여기에 단계를 기록해 두세요.
1. auth /app/Controller/AppController.php 소개
Php 코드
class AppController extends Controller { public $components = array( 'Acl', 'Auth' => array( 'authorize' => array( 'Actions' => array('actionPath' => 'controllers') ) ), 'Session' ); public $helpers = array('Html', 'Form', 'Session'); public function beforeFilter() { //Configure AuthComponent $this->Auth->loginAction = array( 'controller' => 'users', 'action' => 'login' ); $this->Auth->logoutRedirect = array( 'controller' => 'users', 'action' => 'login' ); $this->Auth->loginRedirect = array( 'controller' => 'posts', 'action' => 'add' ); } }
2. acl 테이블 생성
Bash 코드
./Console/cake 스키마 생성 DbAcl
3. 그룹 및 사용자 추가
모델 파일/app/Model/User.php 설정
Php 코드
class User extends AppModel { public $belongsTo = array('Group'); public $actsAs = array('Acl' => array('type' => 'requester')); public function parentNode() { if (!$this->id && emptyempty($this->data)) { return null; } if (isset($this->data['User']['group_id'])) { $groupId = $this->data['User']['group_id']; } else { $groupId = $this->field('group_id'); } if (!$groupId) { return null; } return array('Group' => array('id' => $groupId)); } public function bindNode($user) { return array('model' => 'Group', 'foreign_key' => $user['User']['group_id']); } }
File/app/Model/Group.php
Php 코드
class Group extends AppModel { public $actsAs = array('Acl' => array('type' => 'requester')); public function parentNode() { return null; } }
baking를 사용하여 사용자 및 그룹에 대한 mvc 파일을 생성하고, 그룹 및 사용자를 추가합니다. aros 데이터를 생성합니다.
4. AclExtras를 사용하여 aco 테이블 데이터 생성
AclExtras를 다운로드하여 /app/Plugin/ 디렉터리에 설치합니다.
Php 코드
//app/Config/boostrap.php // ... CakePlugin::load('AclExtras'); 利用bash命令生成可用的acos数据 Bash代码 ./Console/cake AclExtras.AclExtras aco_sync
5. 로그인 및 로그아웃 추가
Php 코드
<!-- login.ctp --> <h2>Login</h2> <?php echo $this->Form->create('User', array( 'url' => array( 'controller' => 'users', 'action' => 'login' ) )); echo $this->Form->input('User.username'); echo $this->Form->input('User.password'); echo $this->Form->end('Login'); ?> ############分割线######## // action public function login() { if ($this->Session->read('Auth.User')) { $this->Session->setFlash('You are logged in!'); return $this->redirect('/'); } }
Php 코드
public function logout() { $this->redirect($this->Auth->logout()); }
6. ACO 관련
acos의 표시는 TreeBehavior를 사용합니다
Php 코드
// /app/Model/Aco.php 文件 public $actsAs = array('Tree'); public $displayField = 'alias'; // 输出 $this->Aco->generateTreeList(null, null, null, ' ');
7. 권한 할당
Php 코드
public function initDB() { $group = $this->User->Group; // Allow admins to everything $group->id = 1; $this->Acl->allow($group, 'controllers'); // allow managers to posts and widgets $group->id = 2; $this->Acl->deny($group, 'controllers'); $this->Acl->allow($group, 'controllers/Posts'); $this->Acl->allow($group, 'controllers/Widgets'); // allow users to only add and edit on posts and widgets $group->id = 3; $this->Acl->deny($group, 'controllers'); $this->Acl->allow($group, 'controllers/Posts/add'); $this->Acl->allow($group, 'controllers/Posts/edit'); $this->Acl->allow($group, 'controllers/Widgets/add'); $this->Acl->allow($group, 'controllers/Widgets/edit'); // allow basic users to log out $this->Acl->allow($group, 'controllers/users/logout'); // we add an exit to avoid an ugly "missing views" error message echo "all done"; exit; }
8. 정리
Php代码 /** * custom beforeFilter */ public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('XXX'); // $this->Auth->allow(); }