<?php if (!class_exists('Permit')) { App::import('Component', 'Sanction.PermitComponent'); } Permit::access(array('plugin' => 'settings'), array('auth' => array('group' => 'admin')), array('redirect' => array('plugin' => null, 'controller' => 'users', 'action' => 'login'), 'element' => 'flash/error')); Permit::access(array('controller' => 'users', 'action' => array('login', 'register', 'forgot_password', 'reset_password')), array('auth' => false), array('redirect' => array('controller' => 'users', 'action' => 'index'))); Permit::access(array('controller' => 'users', 'action' => array('change_password', 'dashboard', 'profile', 'logout')), array('auth' => true), array('redirect' => array('controller' => 'users', 'action' => 'login'))); Permit::access(array('controller' => 'account'), array('auth' => true), array('redirect' => array('controller' => 'users', 'action' => 'login'))); Permit::access(array('admin' => true), array('auth' => array('is_admin' => true)), array('redirect' => array('controller' => 'users', 'action' => 'index', 'admin' => false)));
public function testPermitObject() { Permit::$routes = array(); Permit::$executed = null; $this->assertEqual(count(Permit::$routes), 0); Permit::access(array('controller' => array('permit_tests', 'tags'), 'action' => array('add', 'edit', 'delete')), array('auth' => array('group' => 'admin')), array('redirect' => array('controller' => 'users', 'action' => 'login'))); $this->assertEqual(count(Permit::$routes), 1); Permit::access(array('controller' => 'permit_tests', 'action' => array('add', 'edit', 'delete')), array('auth' => array('group' => 'admin')), array('redirect' => array('controller' => 'users', 'action' => 'login'))); $this->assertEqual(count(Permit::$routes), 2); Permit::access(array('controller' => 'users'), array('auth' => true), array('element' => 'auth_error', 'redirect' => array('controller' => 'users', 'action' => 'login'))); $this->assertEqual(count(Permit::$routes), 3); $expected = array('route' => array('controller' => array('permit_tests', 'tags'), 'action' => array('add', 'edit', 'delete')), 'rules' => array('auth' => array('group' => 'admin')), 'redirect' => array('controller' => 'users', 'action' => 'login'), 'message' => __('Access denied', true), 'element' => 'default', 'params' => array(), 'key' => 'flash'); $this->assertEqual(current(Permit::$routes), $expected); reset(Permit::$routes); $expected = array('route' => array('controller' => 'users'), 'rules' => array('auth' => true), 'redirect' => array('controller' => 'users', 'action' => 'login'), 'message' => __('Access denied', true), 'element' => 'auth_error', 'params' => array(), 'key' => 'flash'); $this->assertEqual(end(Permit::$routes), $expected); reset(Permit::$routes); }
<?php App::import('Component', 'PermitComponent'); Permit::access(array('controller' => 'github'), array('auth' => array('group' => 'admin')), array('redirect' => array('controller' => 'packages', 'action' => 'index'))); Permit::access(array('controller' => array('maintainers', 'packages'), 'action' => array('add', 'edit', 'delete')), array('auth' => array('group' => 'admin')), array('redirect' => array('action' => 'index'))); Permit::access(array('plugin' => 'settings'), array('auth' => array('group' => 'admin')), array('redirect' => array('controller' => 'packages', 'action' => 'index'))); Permit::access(array('controller' => 'users', 'action' => array('change_password', 'dashboard', 'logout')), array('auth' => true), array('redirect' => array('controller' => 'users', 'action' => 'login'))); Permit::access(array('controller' => 'users', 'action' => array('forgot_password', 'login', 'reset_password')), array('auth' => false), array('redirect' => array('controller' => 'users', 'action' => 'dashboard')));
/** * Connects a route to a given ruleset * * @param array $route array describing a route * @param array $rules array of rules regarding the route * @param array $redirect Array containing the url to redirect to on route fail * @return array Array of connected routes */ public function access($route, $rules = array(), $redirect = array()) { $this->routes[] = Permit::access($route, $rules, $redirect); }
function testPermitObject() { $permit = Permit::getInstance(); $Permit = PermitComponent::getInstance(); $this->assertEqual(count($Permit->routes), 0); Permit::access(array('controller' => 'posts', 'action' => array('add', 'edit', 'delete')), array('auth' => true), array('redirect' => array('controller' => 'users', 'action' => 'login'))); $this->assertEqual(count($Permit->routes), 1); Permit::access(array('controller' => 'users'), array('auth' => true), array('element' => 'auth_error', 'redirect' => array('controller' => 'users', 'action' => 'login'))); $this->assertEqual(count($Permit->routes), 2); $expected = array('route' => array('controller' => 'posts', 'action' => array('add', 'edit', 'delete')), 'rules' => array('auth' => array('group' => 'admin')), 'redirect' => array('controller' => 'users', 'action' => 'login'), 'message' => __('Access denied', true), 'element' => 'default', 'params' => array(), 'key' => 'flash'); $this->assertEqual(current($Permit->routes), $expected); reset($Permit->routes); $expected = array('route' => array('controller' => 'users'), 'rules' => array('auth' => true), 'redirect' => array('controller' => 'users', 'action' => 'login'), 'message' => __('Access denied', true), 'element' => 'auth_error', 'params' => array(), 'key' => 'flash'); $this->assertEqual(end($Permit->routes), $expected); reset($Permit->routes); }
<?php App::uses('Permit', 'Sanction.Controller/Component'); $element = 'flash/warning'; $message = __('Access denied.'); $adminMessage = __('Sorry, but you need to be an administrator to access this location.'); $redirect = $adminRedirect = $logoutRedirect = array('admin' => false, 'controller' => 'packages', 'action' => 'home'); if (Configure::read('Feature.auth_required')) { $message = __('Sorry, but you need to be logged in to access this location.'); $redirect = array('controller' => 'users', 'action' => 'login'); } Permit::access(array('prefix' => 'admin'), array('auth' => array('is_admin' => 1)), array('element' => $element, 'message' => $adminMessage, 'redirect' => $adminRedirect)); Permit::access(array('controllers' => 'users', 'action' => 'admin'), array('auth' => array('is_admin' => 1)), array('element' => $element, 'message' => $adminMessage, 'redirect' => $adminRedirect)); // Block access to every plugin in case people try to cut around application logic Permit::access(array('plugin' => array('favorites', 'ratings', 'categories', 'settings')), array('auth' => array('is_admin' => 1)), array('element' => $element, 'message' => $adminMessage, 'redirect' => $adminRedirect)); Permit::access(array('controller' => 'github'), array('auth' => array('is_admin' => 1)), array('element' => $element, 'message' => $adminMessage, 'redirect' => $adminRedirect)); Permit::access(array('controller' => 'users', 'action' => array('change_password', 'admin', 'logout')), array('auth' => true), compact('element', 'message', 'redirect')); Permit::access(array('controller' => 'packages', 'action' => array('rate', 'bookmark')), array('auth' => true), compact('element', 'message', 'redirect')); Permit::access(array('controller' => 'users', 'action' => array('forgot_password', 'login', 'reset_password')), array('auth' => false), array('element' => $element, 'message' => __('Sorry, but you need to be logged out to access this location.'), 'redirect' => $logoutRedirect));