2014-06-05 11 views
5

확장 api_와의 ACL 테이블 aros_acos, 코드는CakePHP의 사용자 정의 ACL 권한 부여, AROS는 & I CakePHP를, 나는 ACL을 사용하여 사용자에게 권한을 부여 사용자 지정 권한을 구현하기 위해 노력하고 사용하여 편안하고 API를 개발하고

<?php 
App::uses('BaseAuthorize', 'Controller/Component/Auth'); 

class ApiAuthorize extends BaseAuthorize { 
    public function authorize($user, CakeRequest $request) { 
       $allowed = false; 
     $Acl = $this->_Collection->load('Acl'); 
     list($plugin, $userModel) = pluginSplit($this->settings['userModel']); 
     $action = $this->action($request); 

     $cacheName = 'permissions_' . strval($user['id']); 
     if (($permissions = Cache::read($cacheName, 'permissions')) === false) { 
      $permissions = array(); 
      Cache::write($cacheName, $permissions, 'permissions'); 
     } 
     if (!isset($permissions[$action])) { 
      $User = ClassRegistry::init($this->settings['userModel']); 
      $User->id = $user['id']; 
      $allowed = $Acl->check($User, $action); 
      $permissions[$action] = $allowed; 
      Cache::write($cacheName, $permissions, 'permissions'); 
      $hit = false; 
     } else { 
      $allowed = $permissions[$action]; 
      $hit = true; 
     } 
      return $allowed; 
    } 
} 
과 같이 보입니다

나는 같은 (croogo를 사용하여 개발)의 웹 사이트에 대한 데이터베이스 및 API를 사용하고 그래서 내 데이터베이스는 이미 API를 위해 내가 api_acos 같은 api_ 확장하여 만든 ACL 테이블을 오전 있도록 acos, 웹 사이트의 aros & aros_acos 테이블, api_aros & api_aros_api_acos

있다 내 ACL 테이블

새로운 스키마가 여기에서 사용자 정의 ACL 클래스를

CREATE TABLE IF NOT EXISTS `api_acos` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `parent_id` int(10) DEFAULT NULL, 
    `model` varchar(255) DEFAULT '', 
    `foreign_key` int(10) unsigned DEFAULT NULL, 
    `alias` varchar(255) DEFAULT '', 
    `lft` int(10) DEFAULT NULL, 
    `rght` int(10) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `api_acos_api_aros` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `api_aro_id` int(10) unsigned NOT NULL, 
    `api_aco_id` int(10) unsigned NOT NULL, 
    `_create` char(2) NOT NULL DEFAULT '0', 
    `_read` char(2) NOT NULL DEFAULT '0', 
    `_update` char(2) NOT NULL DEFAULT '0', 
    `_delete` char(2) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `api_aros` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `parent_id` int(10) DEFAULT NULL, 
    `model` varchar(255) DEFAULT '', 
    `foreign_key` int(10) unsigned DEFAULT NULL, 
    `alias` varchar(255) DEFAULT '', 
    `lft` int(10) DEFAULT NULL, 
    `rght` int(10) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

사용하고 있습니다 https://github.com/FriendsOfCake/Authorize/blob/master/Controller/Component/Acl/HabtmDbAcl.php

내 질문은 어디에이다 내가 내 새 데이터베이스 테이블을 사용하는 방법 (api_acosapi_aros & api_aros_api_acos) ACL 조회를 원하십니까? 제발 사용자 정의 ACL 인증 구현에 대한 참조를 취할 수있는 코드를 알려주십시오.

답변

2

API 대신 다른 루트 노드를 사용하여 기존의 acl 테이블을 Croogo에서 다시 사용합니다.

이것은 Croogo 코어가하는 일입니다. 아쉽게도 설치 데이터는 기본적으로이 정보를 제공하지 않습니다.

$ Console/cake acl.extras aco_sync 

Welcome to CakePHP v2.5.1 Console 
--------------------------------------------------------------- 
App : croogo-app 
Path: /home/rachman/work/personal/deploy/croogo-app/ 
--------------------------------------------------------------- 
Skipped Aco node: controllers/Croogo/CroogoError 
Created Aco node: controllers/Extensions/ExtensionsDashboard 
Created Aco node: controllers/Extensions/ExtensionsDashboard/admin_index 
Created Aco node: controllers/Extensions/ExtensionsPlugins/admin_moveup 
Created Aco node: controllers/Extensions/ExtensionsPlugins/admin_movedown 
Created Aco node: controllers/Menus/Links/admin_link_chooser 
Created Aco node: controllers/Menus/Menus/admin_toggle 
Created Aco node: controllers/Meta/Meta 
Created Aco node: controllers/Meta/Meta/admin_delete_meta 
Created Aco node: controllers/Meta/Meta/admin_add_meta 
Created Aco node: api/v1_0/Nodes/Nodes/lookup 
Created Aco node: api/v1_0/Users/Users/lookup 
Created Aco node: controllers/Wysiwyg 
Aco Sync Complete 

당신은 수동 API의 요구 사항에 따라 필요한 ACO로는를 추가하거나 엑스트라 쉘 가능하게 할 기초로 ApiComponent를 사용할 수 있습니다

당신은 Acl.extras 쉘을 실행하여 api 루트 노드를 만들 수 있습니다 나중에 자동으로 만들 수 있습니다.

UserApiComponentNodeApiComponent은 API 메소드를 구현하는 방법에 대한 몇 가지 예를 제공 할 수 있습니다.