action(); * - `actionMap` - Action -> crud mappings. Used by authorization objects that want to map actions to CRUD roles. * - `userModel` - Model name that ARO records can be found under. Defaults to 'User'. * * @var array */ public $settings = array( 'actionPath' => null, 'actionMap' => array( 'index' => 'read', 'add' => 'create', 'edit' => 'update', 'view' => 'read', 'delete' => 'delete', 'remove' => 'delete' ), 'userModel' => 'User' ); /** * Constructor * * @param ComponentCollection $collection The controller for this request. * @param string $settings An array of settings. This class does not use any settings. */ public function __construct(ComponentCollection $collection, $settings = array()) { $this->_Collection = $collection; $controller = $collection->getController(); $this->controller($controller); $this->settings = Hash::merge($this->settings, $settings); } /** * Checks user authorization. * * @param array $user Active user data * @param CakeRequest $request Request instance. * @return bool */ abstract public function authorize($user, CakeRequest $request); /** * Accessor to the controller object. * * @param Controller $controller null to get, a controller to set. * @return mixed * @throws CakeException */ public function controller(?Controller $controller = null) { if ($controller) { if (!$controller instanceof Controller) { throw new CakeException(__d('cake_dev', '$controller needs to be an instance of Controller')); } $this->_Controller = $controller; return true; } return $this->_Controller; } /** * Get the action path for a given request. Primarily used by authorize objects * that need to get information about the plugin, controller, and action being invoked. * * @param CakeRequest $request The request a path is needed for. * @param string $path Path format. * @return string the action path for the given request. */ public function action(CakeRequest $request, $path = '/:plugin/:controller/:action') { $plugin = empty($request['plugin']) ? null : Inflector::camelize($request['plugin']) . '/'; $path = str_replace( array(':controller', ':action', ':plugin/'), array(Inflector::camelize($request['controller']), $request['action'], $plugin), $this->settings['actionPath'] . $path ); $path = str_replace('//', '/', $path); return trim($path, '/'); } /** * Maps crud actions to actual action names. Used to modify or get the current mapped actions. * * Create additional mappings for a standard CRUD operation: * * ``` * $this->Auth->mapActions(array('create' => array('add', 'register')); * ``` * * Or equivalently: * * ``` * $this->Auth->mapActions(array('register' => 'create', 'add' => 'create')); * ``` * * Create mappings for custom CRUD operations: * * ``` * $this->Auth->mapActions(array('range' => 'search')); * ``` * * You can use the custom CRUD operations to create additional generic permissions * that behave like CRUD operations. Doing this will require additional columns on the * permissions lookup. For example if one wanted an additional search CRUD operation * one would create and additional column '_search' in the aros_acos table. One could * create a custom admin CRUD operation for administration functions similarly if needed. * * @param array $map Either an array of mappings, or undefined to get current values. * @return mixed Either the current mappings or null when setting. * @see AuthComponent::mapActions() */ public function mapActions($map = array()) { if (empty($map)) { return $this->settings['actionMap']; } foreach ($map as $action => $type) { if (is_array($type)) { foreach ($type as $typedAction) { $this->settings['actionMap'][$typedAction] = $action; } } else { $this->settings['actionMap'][$action] = $type; } } } }