ich eine RESTful API entwickle mit CakePHP, Ich versuche, eine benutzerdefinierte Autorisierung zu implementieren, die Benutzer unter Verwendung von ACL genehmigen, sieht Code so etwas wieCakePHP benutzerdefinierte ACL Autorisierung acos verwenden, aros & aros_acos Acl Tabellen mit der Erweiterung 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;
}
}
ich für die Website gleiche Datenbank verwende (mit croogo entwickelt) und API so bereits meine Datenbank hat acos
, aros
& aros_acos
Tabellen der Website so für API bin ich erstellt ACL Tabellen mit api_ Erweiterung wie api_acos
, api_aros
& api_aros_api_acos
New Schema meiner ACL-Tabellen wird
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 ;
ich von hier https://github.com/FriendsOfCake/Authorize/blob/master/Controller/Component/Acl/HabtmDbAcl.php benutzerdefinierten ACL Klasse ist mit
Meine Frage ist, wo und wie kann ich meine neue Datenbanktabellen verwenden (api_acos
, api_aros
& api_aros_api_acos
) für die ACL-Suche? Bitte zeigen Sie mir Code, von wo ich Referenz für benutzerdefinierte ACL-Autorisierung-Implementierung nehmen kann.