Skip to content

Instantly share code, notes, and snippets.

@kleberksms
Created May 30, 2014 13:06
Show Gist options
  • Save kleberksms/9179bcfba7f1ba8cd300 to your computer and use it in GitHub Desktop.
Save kleberksms/9179bcfba7f1ba8cd300 to your computer and use it in GitHub Desktop.
<?php
/**
* Application level Controller
*
* This file is application-wide controller file. You can put all
* application-wide controller-related methods here.
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package app.Controller
* @since CakePHP(tm) v 0.2.9
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Controller', 'Controller');
/**
* Application Controller
*
* Add your application-wide methods in the class below, your controllers
* will inherit them.
*
* @package app.Controller
* @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
*/
class AppController extends Controller {
public $components = array('Acl','Session','DebugKit.Toolbar','RequestHandler','Auth');
public $helpers = array('Html','Form','Session');
public $uses = array('Role');
public $roleId;
public $UAP;
public $aroId;
public function beforeFilter()
{
if ($this->Session->check('Config.language')) {
Configure::write('Config.language', $this->Session->read('Config.language'));
}
$this->Auth->authorize = array(
AuthComponent::ALL => array('actionPath' => 'controllers/','userModel' => 'Role'),
//Aqui eu defino que sempre vai usar role
'Actions',
);
$this->Auth->authenticate = array(
'Blowfish' => array(
'userModel' => 'User'
)
);
if(!$this->_isAdmin()){
$this->roleId = $this->getRoleId();
$this->UAP = $this->Role->find('first',array('conditions'=>array('Role.id'=>$this->roleId)));
$aro = $this->Acl->Aro->find('first',array(
'conditions'=>array(
'Aro.model'=>'Role',
'Aro.foreign_key'=>$this->roleId)));
$this->aroId = $aro['Aro']['id'];
$allow = array_merge($this->_getAllowed(), array('display')); //aqui é para a action display de pages
$this->Auth->allowedActions = $allow;
}
//Configure AuthComponent
$this->Auth->loginAction = array(
'controller' => 'users',
'action' => 'login'
);
$this->Auth->logoutRedirect = array(
'controller' => 'users',
'action' => 'login'
);
$this->Auth->loginRedirect = array(
'controller' => 'pages',
'action' => 'display',
'home'
);
$this->Auth->authError = __('Not Authorized');
return parent::beforeFilter();
}
protected function _getAllowed($actionsIds = null, $controllerActions = null){
if(is_null($actionsIds)){
$actionsIds = $this->_getAllowedActionsIds();
}
if(is_null($controllerActions)){
$controllerActions = $this->_getControllerActions();
}
$allow = array();
foreach ($actionsIds as $value) {
array_push($allow, $controllerActions[$value]);
}
return $allow;
}
protected function _getAllowedActionsIds($allowedActions = null){
if(is_null($allowedActions)){
$allowedActions = $this->_getAllowedActions();
}
return array_values($allowedActions);
}
protected function _getAllowedActions($aroId = null, $acoId = null){
if(is_null($aroId)){
$aroId = $this->aroId;
}
if(is_null($acoId)){
$acoId = $this->_getControllerActionsIds();
}
$result = $this->Acl->Aco->Permission->find('list',array(
'conditions'=>array(
'Permission.aro_id'=>$aroId,
'Permission.aco_id'=>$acoId,
'Permission._create'=>1,
'Permission._read'=>1,
'Permission._update'=>1,
'Permission._delete'=>1,
),
'fields'=>array('id','aco_id'),
'recursive'=>'-1'));
return $result;
}
protected function _getControllerActionsIds($controllerActions = null){
if(is_null($controllerActions)){
$controllerActions = $this->_getControllerActions();
}
return array_keys($controllerActions);
}
protected function _getControllerActions($node = null){
if(is_null($node)){
$node = $this->_getNodeController();
}
return $this->Acl->Aco->find(
'list',array(
'conditions'=>array('Aco.parent_id'=>$node['0']['Aco']['id']),
'fields'=>array('Aco.id','Aco.alias'),
'recursive'=>'-1',
));
}
protected function _getNodeController(){
return $this->Acl->Aco->node("controllers/{$this->name}");
}
protected function _isAdmin(){
if($this->Auth->user() && $this->Auth->user('role_id') == 1){
$this->Auth->allow();
return true;
}
return false;
}
public function getRoleId(){
if(!is_null($this->Auth->user('role_id'))){
return $this->Auth->user('role_id');
}
return 9;//Usuário não cadastrado
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment