Package Data | |
---|---|
Maintainer Username: | gilsonsouza |
Maintainer Contact: | gilsonfernandesbatista@gmail.com (Gilson Fernandes Batista de Souza) |
Package Create Date: | 2016-12-21 |
Package Last Update: | 2017-02-24 |
Home Page: | |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-22 03:01:40 |
Package Statistics | |
---|---|
Total Downloads: | 414 |
Monthly Downloads: | 3 |
Daily Downloads: | 1 |
Total Stars: | 0 |
Total Watchers: | 2 |
Total Forks: | 1 |
Total Open Issues: | 0 |
Usando o composer, execute o comando a seguir para instalar automaticamente composer.json
:
composer require gilsonsouza/lara-polices
ou manualmente no seu arquivo composer.json
{
"require": {
"composer require gilsonsouza/lara-polices": "^1.0"
}
}
Para utilizá-los é necessário registrá-los no seu arquivo app/Http/Kernel.php.
protected $middleware = [
// other middleware ommited
\LaraPolices\Middlewares\PolicesMiddleware::class,
];
Para configurar as mensagens de erro e a pasta onde ficará as Polices de seu projeto é necessário adicionar o aquivo polices.php
a pasta config do seu projeto. Para isso adicione o seguinte código no fim da seção providers
// file START ommited
'providers' => [
// other pro````viders ommited
\LaraPolices\Providers\PolicesServiceProvider::class,
],
// file END ommited
Para publicar o arquivo de configuração padrão que acompanham o package, execute o seguinte comando:
php artisan vendor:publish --provider="LaraPolices\Providers\PolicesServiceProvider"
Configure o arquivo com as mensagens e paths necessários.
config/polices.php
Na criação de uma police, adicione use LaraPolices\Polices\AbstractPolice;
como uma dependência de sua classe que deve extende-la.
As definições de methodos e validações de uma police são bem abertos, apenas algumas convenções devem ser observadas e respeitadas:
O mesmo nome de classe usado no Controller deverá ser o nome da classe da Police.
Ex.: "PostsController" => "PostsPolice"
As rotas cobertas pelo middleware de polices devem apontar sempre para um {Controller@action} e não possuir um Closure. Rotas com
closures na definição não são cobertas pelas Polices.
Coberto: "Route::get('posts', 'PostsController@index')" => "PostsPolice@index"
Não Coberto: "Route::get('posts', function () {
return [];
)" => "-"
Os métodos de validação da Police devem ser os mesmos do controller no qual será aplicada. Tais metodos recebem `$request`
como parâmetro para captura de dados e validações
Ex.: "PostsController@show" => "PostsPolice@show"
Para validação com dados do usuário, você poderá utilizar a variável $this->user
para capturar o Authenticatable atual no Auth.
Exemplo de criação de uma police.
<?php
namespace LaraPolicesTests;
use LaraPolices\Polices\AbstractPolice;
class MockPolice extends AbstractPolice
{
public function mockTrueMethod($request)
{
return (bool) ($request->owner_id == $this->user->group['owner_id'] &&
$request->owner_type == $this->user->group['owner_type']
);
}
}
Detalhes da classe Abstract Police.
<?php
namespace LaraPolices\Polices;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use LaraPolices\Exceptions\ObjectNotFoundException;
abstract class AbstractPolice
{
/**
* Define the Autenticatable Interface
* @var Authenticatable
*/
protected $user;
/**
* @var array Objects storage
*/
private $objects = array();
/**
* AbstractPolice constructor.
* @param Request $request
* @param Authenticatable $user
*/
public function __construct(Authenticatable $user)
{
$this->user = $user;
}
/**
* Store object in police
*
* @param mixed $object
* @return $this
*/
public function pushObject($object)
{
$objectReflection = new \ReflectionClass($object);
$this->objects[$objectReflection->getShortName()] = $object;
return $this;
}
/**
* Get object from police
*
* @param $name
* @return mixed
* @throws ObjectNotFoundException
*/
public function getObject($name)
{
if (!isset($this->objects[$name])) {
if (class_exists($name)) {
$this->pushObject(App::make($name));
return $this->getObject($name);
}
throw new ObjectNotFoundException("Object not found.");
}
return $this->objects[$name];
}
/**
* Function to call action method to authorize resource permission to user.
* This function should be return a boolean.
* @param Request $request Request to validate
* @param string $actionToValidate Police action to validate
* @return bool
*/
public function canMakeAction(Request $request, $actionToValidate)
{
return (bool) $this->$actionToValidate($request);
}
}
Fique avontade para sugerir correções, melhorias na documentação ou código ou se preferir realizar um pull-request em nosso código. :-D
Gilson Fernandes Batista de Souza - Site Pessoal