gilsonsouza /lara-polices
Laravel 请求策略
v1.2
2017-01-11 16:14 UTC
Requires
- laravel/framework: 5.*
Requires (Dev)
- phpunit/phpunit: 5.5.*
This package is auto-updated.
Last update: 2024-09-16 02:01:44 UTC
README
使用composer,执行以下命令自动安装composer.json
composer require gilsonsouza/lara-polices
或手动在您的composer.json文件中安装
{
"require": {
"composer require gilsonsouza/lara-polices": "^1.0"
}
}
2. 中间件
要使用它们,需要在您的app/Http/Kernel.php文件中注册。
protected $middleware = [ // other middleware ommited \LaraPolices\Middlewares\PolicesMiddleware::class, ];
3. 提供者(可选)
为了配置错误消息和存储策略文件的文件夹,需要在您的项目config目录中添加polices.php文件。为此,在providers部分的末尾添加以下代码
// file START ommited 'providers' => [ // other pro````viders ommited \LaraPolices\Providers\PolicesServiceProvider::class, ], // file END ommited
3.1 发布配置文件(仅在完成步骤3后执行)
要发布与包一起提供的默认配置文件,请执行以下命令
php artisan vendor:publish --provider="LaraPolices\Providers\PolicesServiceProvider"
4 配置(仅在完成步骤3和3.1后执行)
使用所需的错误消息和路径配置文件。
config/polices.php
5 创建策略
在创建策略时,将use LaraPolices\Polices\AbstractPolice;作为您要扩展的类的依赖项添加。策略的方法和验证定义非常开放,只需遵守一些约定即可。
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"
对于基于用户数据的验证,您可以使用$this->user变量来捕获Auth中的当前Authenticatable。
创建策略的示例。
<?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']
);
}
}
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);
}
}
感谢和贡献
请随时提出纠正、改进文档或代码的建议,或者如果您愿意,在我们的代码中发起pull-request。:-D
贡献者
Gilson Fernandes Batista de Souza - 个人网站