Class perms

Description

Classe de permissões de acesso

As permissões são calculadas baseando-se nas informações:

  • (bitsUser) Grupos do usuário $objUser->grupos (array de objetos de grupo)
  • (bitsActions) Bits de permissão do módulo definidas em $req->objConfig->actions
  • (bitsPerm) Bits de permissão de grupos armazenadas em $req->objConfig->permissions
ou no banco de dados:
  1.     CREATE TABLE `TB_PERMS` (
  2.       `PK_PERM` int(11unsigned NOT NULL auto_increment,
  3.       `NO_MODULO` varchar(32NOT NULL,
  4.       `FK_GRUPO` int(11NOT NULL,
  5.       `BITS_PERM` varchar(255NOT NULL default '0',
  6.       PRIMARY KEY  (`PK_PERM`),
  7.       UNIQUE KEY `NO_MODULO` (`NO_MODULO`,`FK_GRUPO`)
  8.     ENGINE=InnoDB DEFAULT CHARSET=utf8;

O array $req->objConfig->permissions ou o campo BITS_PERM armazenam para

  • grupo FK_GRUPO um número decimal inteiro correspondente à soma dos
inteiros de cada ação a que o grupo tem direito conforme definido em $req->objConfig->actions. Caso encontre-se um array ou string (que represente um array) ao invés de um número decimal inteiro assume-se que existam sub-tipos de ação ($_GET['t']), onde então usa-se o valor de índice $_GET['t'] do array.

Assume-se que:

  • PK_GRUPO = 0 ou PK_USUARIO = 0 (zero) é administrador e tem todas
as permissões.
  • Se o valor da permissão para a ação for 0 (zero) todos têm permissão
($module_conf->actions[$_GET['a']][0] = 0)

No diretório do módulo controlador ($req->strPath) deve-se criar o arquivo config.php com a definição da classe module_conf e as definições do módulo, entre elas o $actions e opcionalmente o $permissions caso seja hard-coded:

  1.     public $actions array('lista'    => array(1,  array('id' => 0'value' => 'Listagem dos grupos')),
  2.                          'add'      => array(2,  array('id' => 0'value' => 'Adicionar novo grupo')),
  3.                          'del'      => array(4,  array('id' => 0'value' => 'Remover um grupo')),
  4.                          'delmulti' => array(8,  array('id' => 0'value' => 'Remover vários grupos em operação única')),
  5.                          'edit'     => array(16array('id' => 0'value' => 'Editar um grupo existente')),
  6.                          'save'     => array(32array('id' => 0'value' => 'Gravar os dados de um grupo novo ou existente'))
  7.                          );
  8.  public $permissions array(=> 31=> 17=> 1213 => 3123 => 3129 => 0);
, onde no $permissions, os valores são a soma dos valores de $acoes dos $_GET['a'] a que o ator possui permissão e a chave (0, 1, 2, 3, 4, 5) corresponde ao $req->objUser->grupos do usuário logado. Cada valor pode ser um inteiro, objeto de permissão ou array quando assume-se sub-tipos dentro de cada ação, $_GET['t'] corresponde então à chave do array onde deve-se buscar o valor.

Located in /perms.classe.php (line 76)

model
   |
   --perms
Variable Summary
array $bitsPerm
integer $bitsUser
string $strOrdCampo
string $t
string $_strFldPk
string $_strTable
Method Summary
void checkBit (integer $bitsUser, integer $bitAction)
boolean checkUser ( $bitAcao, [integer $bitsUser = false], string $strAcao)
array getBitsPerm (string $strModule)
void getBitsUser ( $arrBits)
void setBitsGroup (grupo $objGrupo, [array $bitsPerm = false])
void setBitsPerm (array $bitsPerm)
void setBitsUser (usuario $objUser, array $bitsPerm)
void __contruct ()
Variables
array $bitsPerm = array() (line 118)
  • var: define as permissões para cada grupo.
    1.  $this->bitsPerm array(12 => 013 => 3215 => 5)
    Neste exemplo:
    • o grupo PK_GRUPO=12 não possui permissão
    • o grupo PK_GRUPO=13 possui somente o bit 32 (100000)
    • o grupo PK_GRUPO=15 possui os bits 1 e 4 (000101)
  • access: protected
integer $bitsUser = false (line 103)
  • var: valor da permissão do usuário para o módulo/action conforme os grupos É calculado efetuando operação bitwise OR (|) nos valores de $permissions correspondentes ao grupo do usuário. Convertido em binário, indica os bits a que a somatória dos grupos do usuáro dá acesso. É ignorado se o usuário é administrdor (pertence ao grupo 0) Deve assumir os valores:
    • true para acesso incondicional de acordo com o usuário/grupos
    • false para proibição
    • um número inteiro que será comparado com o $bitAcao para determinar
    • acesso.
  • access: protected
string $strOrdCampo = null (line 89)
  • var: campo padrão de ordenação
  • access: public
string $t (line 107)
  • var: define um sub-tipo da ação
  • access: protected
string $_strFldPk = 'PK_PERM' (line 85)
  • var: nome do campo com o pk
  • access: protected

Redefinition of:
model::$_strFldPk
string $_strTable = 'TB_PERMS' (line 81)
  • var: nome da tabela com os dados
  • access: protected

Redefinition of:
model::$_strTable

Inherited Variables

Inherited from model

model::$_boolUserDb
model::$_strFldNo
Methods
checkBit (line 315)

Verifica se um numero inteiro $bitsUser faz parte do valor da permissão

$intVal através de operação bitwise

  • access: public
void checkBit (integer $bitsUser, integer $bitAction)
  • integer $bitsUser: valor de permissão de um usuário cfme. seus grupos, por ex. 1+2+4+16 = 23
  • integer $bitAction: valor da permissão de uma ação, por ex. 4
checkUser (line 292)

Retorna se há permissão para o recurso solicitado

  • return: true ou false cfme tenha ou nao acesso
  • access: public
boolean checkUser ( $bitAcao, [integer $bitsUser = false], string $strAcao)
  • string $strAcao
  • integer $bitsUser: valor de permissão do usuário, se omitido usa $this->bitsUser calculado em setBitsUser
  • $bitAcao
getBitsPerm (line 152)

Busca as permissões de determinado módulo no banco de dados

  • return: array com as permissoes do módulo, as chaves correspondem ao FK_GRUPO e os valores o número inteiro correspondente aos bits de permissão do grupo (array(FK_GRUPO => BITS_PERM, ...))
  • access: public
array getBitsPerm (string $strModule)
  • string $strModule: nome do módulo do qual se desejam as permissões
getBitsUser (line 169)

Calcula os bits de permissão dado um array de bitsAction a que se tem permissão

  • access: public
void getBitsUser ( $arrBits)
  • $arrBits
setBitsGroup (line 274)

Define $this->bitsUser para uso com grupos

  • access: public
void setBitsGroup (grupo $objGrupo, [array $bitsPerm = false])
  • grupo $objGrupo
  • array $bitsPerm: array com as permissões de cada grupo para um determinado módulo.
setBitsPerm (line 182)

Cria o array no formato PK_GRUPO => PERM

  • see: perms::setBitsUser
  • access: public
void setBitsPerm (array $bitsPerm)
  • array $bitsPerm
setBitsUser (line 219)

Calcula $bitsUser para o módulo solicitado e define $bitsPerm

Resume as permissões de acesso a um determinado módulo de acordo com os grupos do usuário.

  • access: public
void setBitsUser (usuario $objUser, array $bitsPerm)
  • object $objUser: objeto do usuário logado
  • array $bitsPerm: array com as permissões de cada grupo para um determinado módulo. Pode ser um array simples no formato grupo => permissao
    1.  $bitsPermsModule array(=> 34=> 12...);
    Caso o módulo necessite granulação das permissões para uma mesma ação
    • valor de permissão pode ser um array
      1.  $bitsPermsModule array(=> array(231234)=> 12...);
    Pode ser um array de objetos de perms (perms.classe.php) recuperados do banco de dados
    1.  $bitsPermsModule array(=> $objPerms1,
    2.                           => $objPerms2,
    3.                          ...);
    O $bitsPermsModule também pode ser misto, isto é, valores podem ser o número inteiro, array ou o objeto mesclados, desde que não haja conflito de chaves.
__contruct (line 123)

Construtor

  • access: public
void __contruct ()

Inherited Methods

Inherited From model

model::__construct()
model::Delete()
model::Find()
model::getDb()
model::getFields()
model::initPage()
model::Load()
model::Page()
model::Save()
model::Set()

Documentation generated on Sun, 09 Mar 2008 23:52:53 -0300 by phpDocumentor 1.4.0

SourceForge.net Logo Support This Project