Skip to content

frobou/frobou-system-permission

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Frobou System Permission

SensioLabsInsight

Sistema de verificação de permissões de uso.

Como funciona: As permissões são verificadas onde são necessárias, como mostra o exemplo:

$config = new FrobouDbConfig(json_decode(file_get_contents(__DIR__ . './../database.json')));
$connection = new FrobouDbConnection($config);
$perms = new FrobouSystemPermission($connection);
$user = $this->perms->login('test', 'pass', true);
$exp = $user->getPermission('admin');
var_dump($exp);
object(stdClass)#140 (4) {
  ["can_select"]=>
  bool(true)
  ["can_insert"]=>
  bool(false)
  ["can_update"]=>
  bool(true)
  ["can_delete"]=>
  bool(false)
}
if ($exp->can_select){
	echo "I can";
}

A ideia é ter permissões com níveis hierárquicos, admin.teste diz que o usuário tem permissão X no recurso teste da tela admin

Usamos o pacote frobou-db-connect para a conexão com banco de dados. Ao instanciar FrobouSystemPermission, todos os recursos necessários ficam disponíveis.

  • login($username, $password, $pass_in_plain = false)
  • getUserList()
  • getUserTypes()
  • createUser(SystemUser $user)
  • updateUser(SystemUser $user, array $where)
  • deleteUser($username)
  • undeleteUser($username)
  • createGroup($name)
  • getGroupList()
  • createResource($name, $permission)
  • registerGroupResource($username, $resourcename)
  • unregisterGroupResource($username, $resourcename)
  • registerUserResource($username, $resourcename)
  • unregisterUserResource($username, $resourcename)

e a instância de SystemUser recebida no métido login fornece, além dos dados do usuário:

  • getPermission($resource, $separator = '.')
  • getInsertString()
  • getUpdateString(array $where)
  • getSqlParams()

Tipos de permissões:

  • Permissões por grupo.
  • Permissões por usuário.
  • Permissões unificadas:
    • ver MERGE_PERMISSIONS

Usando:

Algumas constantes podem ser usada como uma forma de configuração do sistema.

  • MERGE_PERMISSIONS - Boolean: true faz com que as permissões de usuário subscrevam as permissões de grupo de mesmo nome e mescla ambos, passando a fornecer a junção das permissões resultantes.
  • BASE_PERMISSION - Boolean: true significa que se existirem permissões base, o valor atribuído a elas são retornados, caso contrario a permissão é 0
  • PASSWORD_SALT - String: o valor padrão é "default", se for informado um valor, ele será usado para a geração de senha. Obs: uma senha gerada com um salt não será validada se o valor de PASSWORD_SALT for alterado
  • TRUE_DELETE - Boolean: caso seja true, o registro do usuário será efetivamente excluído, caso contrário, somente desativado. Obs: não existe tratamento pra exclusão das relações entre tabelas, o que significa que, antes de excluir o usuário, todos os registros vinculados devem ser excluídos, criando uma exception do tipo FrobouDbSgdbErrorException

Testando login

public function testLoginOk()
{
    $user = $this->perms->login('test', 'pass', true);
    $this->assertInstanceOf(SystemUser::class, $user);
}

Testando permissões

public function testPermissionForResourceAdminDotTeste()
{
    $user = $this->perms->login('test', 'pass', true);
    $exp = new \stdClass();
    $exp->can_select = true;
    $exp->can_insert = true;
    $exp->can_update = true;
    $exp->can_delete = true;
    $this->assertEquals($user->getPermission('admin.teste'), $exp);
}

Criando um grupo

public function testInsertGroup()
{
    $this->assertTrue($this->perms->createGroup('grp_' . rand(0, 15988)));
}

Criando uma permissão

public function testInsertResource()
{
    $this->assertTrue($this->perms->createResource('admin.test', 0));
}

Criando um usuário

public function testInsertUser()
{
    $user = new SystemUser();
    $user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
        ->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
        ->setPassword('senhanha')->setSystemGroup(1)->setUsername('username_' . rand(0, 12345))->setUserType('T');
    $this->assertTrue($this->perms->createUser($user));
}

Vinculando grupo X permissão

public function testRegisterGroupResource()
{
	$this->perms->createResource('admin.com', 3);
	$this->assertTrue($this->perms->registerGroupResource('user', 'admin.com'));
}

Desvinculando grupo X permissão

public function testUnRegisterGroupResource()
{
	$this->perms->createResource('admin.com', 3);
	$this->assertTrue($this->perms->unregisterGroupResource('user', 'admin.com'));
}

Vinculando user X permissão

public function testRegisterUserResource()
{
    $this->perms->createResource('admin.com', 7);
    $this->assertTrue($this->perms->registerUserResource('ispti', 'admin.com'));
}

Desvinculando user X permissão

public function testRegisterUserResource()
{
    $this->perms->createResource('admin.com', 7);
    $this->assertTrue($this->perms->unregisterUserResource('ispti', 'admin.com'));
}

Testando Remover usuário (desativar)

public function testDeleteUser(){
    $username = 'username_' . rand(0, 12345);
    $user = new SystemUser();
    $user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
        ->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
        ->setPassword('senhanha')->setSystemGroup(1)->setUsername($username)->setUserType('T');
    $this->perms->createUser($user);
    $this->perms->createResource('admin.com', 3);
    $this->perms->registerGroupResource($username, 'admin.com');
    $this->perms->registerUserResource($username, 'admin.com');
    $this->assertTrue($this->perms->deleteUser($username));
}

Testando reativar usuário

public function testUndeleteUser(){
    $username = 'fabio';
    $user = new SystemUser();
    $user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
        ->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
        ->setPassword('senhanha')->setSystemGroup(1)->setUsername($username)->setUserType('T');
    $this->perms->createUser($user);
    $this->perms->deleteUser($username);
    $this->assertTrue($this->perms->undeleteUser($username));
}

Testando remover usuário (realmente)

public function testDeleteUserReal(){
    define('TRUE_DELETE', true);
    $username = 'username_' . rand(0, 12345);
    $user = new SystemUser();
    $user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
        ->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
        ->setPassword('senhanha')->setSystemGroup(1)->setUsername($username)->setUserType('T');
    $this->perms->createUser($user);
    $this->assertTrue($this->perms->deleteUser($username));
}

About

System Permission for PHP Projects

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages