/**
  * Specifies the access control rules.
  * This method is used by the 'accessControl' filter.
  * @return array access control rules
  */
 public function accessRules()
 {
     return array(array('allow', 'actions' => array('update', 'delete'), 'expression' => function () {
         //	Se for admin já retorna permissão de acesso
         if (Sipesq::isAdmin() || Sipesq::isSupport()) {
             return true;
         }
         $projeto = ProjetoOrcamento::model()->findByPk($_GET['id'])->cod_projeto;
         $pessoa = Yii::app()->user->getId();
         //Verifica se atua no projeto
         if (ProjetoPessoaAtuante::model()->count('cod_projeto = :proj AND cod_pessoa = :id', array('id' => $pessoa, 'proj' => $projeto)) > 0) {
             return true;
         }
         //verifica se é um dos coordenadores
         if (Projeto::model()->count('cod_projeto = :proj AND (cod_professor = :id OR cod_grad = :id OR cod_pos_grad = :id)', array('id' => $pessoa, 'proj' => $projeto))) {
             return true;
         }
         //verifica se alguem delegou uma permissão a este usuário
         if (PermissaoProjeto::model()->count('cod_projeto = :projeto AND cod_pessoa = :id', array('id' => $pessoa, 'projeto' => $projeto))) {
             return true;
         }
         //o usuário não é permitido
         return false;
     }), array('allow', 'actions' => array('create'), 'expression' => function () {
         //	Se for admin já retorna permissão de acesso
         if (Sipesq::isAdmin() || Sipesq::isSupport()) {
             return true;
         }
         $projeto = $_GET['id'];
         $pessoa = Yii::app()->user->getId();
         //Verifica se atua no projeto
         if (ProjetoPessoaAtuante::model()->count('cod_projeto = :proj AND cod_pessoa = :id', array('id' => $pessoa, 'proj' => $projeto)) > 0) {
             return true;
         }
         //verifica se é um dos coordenadores
         if (Projeto::model()->count('cod_projeto = :proj AND (cod_professor = :id OR cod_grad = :id OR cod_pos_grad = :id)', array('id' => $pessoa, 'proj' => $projeto))) {
             return true;
         }
         //verifica se alguem delegou uma permissão a este usuário
         if (PermissaoProjeto::model()->count('cod_projeto = :projeto AND cod_pessoa = :id', array('id' => $pessoa, 'projeto' => $projeto))) {
             return true;
         }
         //o usuário não é permitido
         return false;
     }), array('allow', 'actions' => array('create'), 'expression' => function () {
         return Sipesq::isSupport() || Sipesq::getPermition('projeto.financeiro') >= 1;
     }), array('allow', 'actions' => array('update'), 'expression' => function () {
         return Sipesq::isSupport() || Sipesq::getPermition('projeto.financeiro') >= 2;
     }), array('allow', 'actions' => array('delete'), 'expression' => function () {
         return Sipesq::isAdmin() || Sipesq::getPermition('projeto.financeiro') >= 100;
     }), array('deny', 'users' => array('*')));
 }
Beispiel #2
0
 /**
  *
  *       Verifica as permissoes do cadastradas no projeto,
  *       permissoes atribuidas no projeto e permissoes globais do sipesq
  *
  * @param $route - String - Rota da permissao
  * @param $id <opcional> - identificador de um usuário, se nulo pega o usuário logado
  */
 public function getPermition($route, $id = null)
 {
     if (Yii::app()->user->isGuest) {
         return 0;
     }
     if ($id == null) {
         $id = Yii::app()->user->getId();
     }
     if ($id == $this->cod_professor) {
         return 100;
     }
     //Professor Responsável
     if ($id == $this->cod_grad) {
         return 2;
     }
     //Graduando Responsável
     if ($id == $this->cod_pos_grad) {
         return 2;
     }
     //Pós-Graduando Responsável
     $permissao_projeto = PermissaoProjeto::model()->findByPk(array('cod_pessoa' => $id, 'cod_projeto' => $this->cod_projeto));
     $permissao_sipesq = Sipesq::getPermition('projeto.' . $route, $id);
     //Não tem permissao neste projeto
     if ($permissao_projeto == null) {
         return $permissao_sipesq;
     }
     $permissao = 0;
     $routes = split('\\.', $route);
     $perm_pessoa = json_decode($permissao_projeto->permissao);
     foreach ($routes as $r) {
         if (property_exists($perm_pessoa, $r)) {
             $perm_pessoa = $perm_pessoa->{$r};
         } else {
             return -1;
         }
         //Rota inexistente
     }
     if ($perm_pessoa > $permissao) {
         $permissao = $perm_pessoa;
     }
     return $permissao_sipesq > $permissao ? $permissao_sipesq : $permissao;
 }
Beispiel #3
0
 /**
  * retorna um array de logins permitidos a fazer determinada ação com determinado nível
  * @param $nivel
  * @return array $logins[]
  */
 public function loginsPermitidos($nivel)
 {
     $criteria = new CDbCriteria();
     $criteria->addCondition("nivel_permissao >= '{$nivel}'", 'AND');
     $criteria->addCondition("cod_projeto = '{$this->cod_projeto}'", 'AND');
     $loginsArray = array();
     $pesPermitidas = PermissaoProjeto::model()->findAll($criteria);
     foreach ($pesPermitidas as $p) {
         $loginsArray[] = $p->pessoa->login;
     }
     return $loginsArray;
 }
 /**
  * 
  * Deleta uma permissão
  * @param integer $id
  * @throws CHttpException
  */
 public function actionDeletePermissao($cod_projeto, $cod_pessoa)
 {
     $model = PermissaoProjeto::model()->find('cod_pessoa = :cod_pessoa AND cod_projeto = :cod_projeto', array('cod_projeto' => $cod_projeto, 'cod_pessoa' => $cod_pessoa));
     $projeto = Projeto::model()->findByPk($cod_projeto);
     //Verifica a permissão dos usuários.
     if (!in_array(Yii::app()->user->name, array_merge($projeto->loginsPermitidos(PermissaoProjeto::READ_WRITE_DELETE_PERMITION), Yii::app()->params['admins']))) {
         throw new CHttpException(401, 'Acesso Negado. Você não está permitido a fazer esta operação.');
     }
     //	Deleta o projeto
     $model->delete();
     $this->redirect(isset($_GET['returnUrl']) ? $_GET['returnUrl'] : array('index'));
 }
<?php

$id = $_GET['id'];
$permissao = new PermissaoProjeto();
$permissao->cod_projeto = $id;
$permissoes = PermissaoProjeto::model()->findAll(array('condition' => "cod_projeto = " . $id));
if (isset($_POST['PermissaoProjeto'])) {
    $permissao->attributes = $_POST['PermissaoProjeto'];
    if ($permissao->save()) {
        $this->redirect(array('/projeto/gerencial', 'id' => $id));
    }
}
$t = json_encode(array('financeiro' => true, 'info' => false, 'rubricas' => $model->getRubricas(), 'docs' => true, 'atividades' => true));
?>

<a id="gerencial"></a>
<div id="tabGerencial">
	<h2>Gerencial</h2>
	<h4>Permissões do projeto </h4>
	<table class="table table-hover table-striped">
		<tr><th>Nome</th><th>Nível de Acesso</th><th>Detalhe</th></tr>
		<tr>
			<td><?php 
echo $model->coordenador->nome;
?>
</td>
			<td>Admin</td>
			<td><?php 
echo $model->getAttributeLabel('cod_professor');
?>
</td>
 /**
  * 
  * Deleta uma permissão
  * @param integer $id
  * @throws CHttpException
  */
 public function actionDeletePermissao($id, $cod_pessoa)
 {
     if (!Yii::app()->request->isPostRequest) {
         throw new CHttpException(403);
     }
     $model = PermissaoProjeto::model()->findByPk(array('cod_pessoa' => $cod_pessoa, 'cod_projeto' => $id));
     if ($model == null) {
         throw new CHttpException('404');
     }
     //	Deleta o projeto
     $model->delete();
     $this->redirect(isset($_GET['returnUrl']) ? $_GET['returnUrl'] : array('index'));
 }