PHPackages                             frobou/frobou-system-permission - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. frobou/frobou-system-permission

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

frobou/frobou-system-permission
===============================

Frobou System Permissions

1.0.12(7y ago)0107MITPHPPHP &gt;=5.4.0

Since Dec 2Pushed 7y ago2 watchersCompare

[ Source](https://github.com/frobou/frobou-system-permission)[ Packagist](https://packagist.org/packages/frobou/frobou-system-permission)[ Docs](http://frobou.com.br)[ RSS](/packages/frobou-frobou-system-permission/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (2)Versions (15)Used By (0)

Frobou System Permission
------------------------

[](#frobou-system-permission)

[![SensioLabsInsight](https://camo.githubusercontent.com/44ed1e3b17cb21d0f0a1c4a72c791d32c0436576fff8fdf4d48aba9b8b03bf4d/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f62393462306636372d633933642d346462652d396566382d3532363465613931623838342f736d616c6c2e706e67)](https://insight.sensiolabs.com/projects/b94b0f67-c93d-4dbe-9ef8-5264ea91b884)

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](https://github.com/frobou/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:
-------

[](#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));
}

```

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 80% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~51 days

Recently: every ~121 days

Total

13

Last Release

2829d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/65d412fa6236a41066fca7ab940426920b4a4194e918e9b6c5de3f8e50d6567d?d=identicon)[blobs.frobou](/maintainers/blobs.frobou)

---

Top Contributors

[![efepimenta](https://avatars.githubusercontent.com/u/6652068?v=4)](https://github.com/efepimenta "efepimenta (4 commits)")[![frobou](https://avatars.githubusercontent.com/u/15693312?v=4)](https://github.com/frobou "frobou (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/frobou-frobou-system-permission/health.svg)

```
[![Health](https://phpackages.com/badges/frobou-frobou-system-permission/health.svg)](https://phpackages.com/packages/frobou-frobou-system-permission)
```

###  Alternatives

[namshi/jose

JSON Object Signing and Encryption library for PHP.

1.8k99.6M101](/packages/namshi-jose)[league/oauth1-client

OAuth 1.0 Client Library

99698.8M106](/packages/league-oauth1-client)[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k2.9M88](/packages/bezhansalleh-filament-shield)[gesdinet/jwt-refresh-token-bundle

Implements a refresh token system over Json Web Tokens in Symfony

70516.4M35](/packages/gesdinet-jwt-refresh-token-bundle)[league/oauth2-google

Google OAuth 2.0 Client Provider for The PHP League OAuth2-Client

41721.2M118](/packages/league-oauth2-google)[illuminate/auth

The Illuminate Auth package.

9327.3M1.0k](/packages/illuminate-auth)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
