Acl plugin for CakePHP

Installs: 96

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 5

Forks: 1

Open Issues: 0

Type:cakephp-plugin

dev-master 2015-10-29 04:06 UTC

This package is not auto-updated.

Last update: 2024-04-17 09:33:28 UTC


README

License

A plugin for managing ACL in CakePHP applications.

Plugin está em faze inicial de desenvolvimento, estou iniciando com o cakephp faz pouco tempo, favor enviar sugestões e críticas construtivas.

Instalando via composer

Você pode instalar este plugin usando o composer composer. Adicionar a seguinte dependência em seu composer.json file:

"require": {
	"abreu1234/acl": "dev-master"
}

e agora rode em seu terminal php composer.phar update

Carregue o plugin adicionando a seguinte linha em config\bootstrap.php:

Plugin::load('Acl', ['bootstrap' => false, 'routes' => true]);

Criando tabelas

Para criar as tabelas necessárias para o plugin usando Migrations rode o seguinte comando em seu terminal:

bin/cake migrations migrate -p Acl

Carregando complemento Auth

Você deve iniciar o complemento Auth do cakephp

(Auth cakephp) (Auth tutorial)

Configuração básica

Para carregar o complemento você deve adicionar o nome do seu controller de usuários em Controller\AppController.php da sua aplicação

$this->loadComponent('Acl.Acl', ['controllers' =>['user'=>'Users']]);

Caso você utilize grupos adicionar o nome do controller de grupos também

$this->loadComponent('Acl.Acl', ['controllers' =>['user'=>'Users','group'=>'Groups']]);

Sincronizar controllers de plugins

Para sincronizar os controllers de plugins basta adicionar a configuração a índice plugins

$this->loadComponent('Acl.Acl', 
	[
		'controllers' =>['user'=>'Users','group'=>'Groups'],
		'plugins' => ['PluginName']
	]

);

Por padrão o plugin este plugin irá sincronizar os controlelrs

Ignorando pastas e arquivos

Para ignorar alguma pasta ou arquivo durante a sincronização basta adicionar a configuração o índice ignore com a seguinte sintaxe Prefixo->Pasta/Arquivo->Action. Para ignorar todos os prefixos ou pasta de um prefixo adicione *

$this->loadComponent('Acl.Acl', [
	'controllers' =>['user'=>'Users','group'=>'Groups'],
	'plugins' => ['PluginName'],
	'ignore' => [
		'*' => [
	            '.','..','Component','AppController.php','empty',
	            '*'  => ['beforeFilter', 'afterFilter', 'initialize'],
	            'Permission'  => ['add']
	        ],
	        'Admin' => [
	        	'Users' => ['delete']
	        ]
        ]
]);

Dando permissão

Para dar permissão para algum controller sem precisar do banco de dados adicione as seguintes linhas.

$this->loadComponent('Acl.Acl', [
            'authorize' => [
                '/' => [
                    'Users' => ['index'],
                ]
            ],
            'controllers' =>['user'=>'Users']
        ]);

Usar o índice authorize com a seguinte sintaxe Prefixo->Controller->Action no exemplo acima estando dando permissão para o Controller User e Action index. Para aplicação raiz sem prefixo utilizar /

Caso precise autorizar um controller dentro de um prefixo usar o nome do prefixo depois da /

$this->loadComponent('Acl.Acl', [
            'authorize' => [
                '/' => [
                    'Users' => ['index'],
                ],
                '/Admin' => [
                    'Users' => ['add'],
                ]
            ],
            'controllers' =>['user'=>'Users']
        ]);

No exemplo acima estamos dando permissão para o Controller User e Action add do prefixo Admin

Caso precise autorizar um plugin utilizar a seguinte sintaxe Plugin.Prefix user / para a raiz do plugin

$this->loadComponent('Acl.Acl', [
            'authorize' => [
                '/' => [
                    'Users' => ['index'],
                ],
                '/Admin' => [
                    'Users' => ['add'],
                ],
                'Acl./' => [
                    'Permission' => ['index','synchronize'],
                    'UserGroupPermission' => ['index','getPermission','addAjax']
                ],
            ],
            'controllers' =>['user'=>'Users']
        ]);

Exemplo acima por segurança apenas utilize até você ter adicionado permissões para algum usuário ou grupo. Após remover as linhas

'Acl./' => [
          'Permission' => ['index','synchronize'],
          'UserGroupPermission' => ['index','getPermission','addAjax']
      ],

Método isAuthorized

Para fazer a validação do usuário ou grupo, use o método isAuthorized do complemento Auth. Adicione no arquivo AppController.php o seguinte código.

    public function isAuthorized($user)
    {
        if(!$this->Acl->check()) {
            $this->Flash->error(__('User or group no access permission!'));
            return false;
        }

        return true;
    }

Sincronizando

Para sincronizar os controllers e actions basta ir até o endereço: /acl/permission e clicar no link de sincronização é importante o usuário ter permissão de acesso ao controller Permission e Actions index e synchronize

Gerenciando permissões

Para gerenciar as permissões dos usuários ou grupos bastar ir até o endereço : /acl/user-group-permission Selecionar o usuário ou grupo e a as permissões. Para funcionar o usuário é preciso ter sincronizado as permissões e ter permissão de acesso ao controller UserGroupPermission e Actions index, getPermission e addAjax