Created
May 30, 2014 13:06
-
-
Save kleberksms/9179bcfba7f1ba8cd300 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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