junaid-ahmad-khan / laravel-extended-resource-authorization
扩展资源授权
1.7
2020-09-17 13:01 UTC
Requires
- laravel/framework: ~5.7|^5.8|^6.0|^7.0
This package is auto-updated.
Last update: 2024-09-17 00:03:02 UTC
README
安装 PHP >=7.4
composer require junaid-ahmad-khan/laravel-extended-resource-authorization
安装 PHP <7.3
composer require junaid-ahmad-khan/laravel-extended-resource-authorization:1.5
描述
此包提供了一种简单的方式来授权自定义方法,当使用
class UserController extends Controller{
public function __construct(){
$this->authorizeResource(User::class,'user');
}
}
仅适用于默认资源路由 show, create, edit, store, update 和 destroy 时
简单用法
步骤 1
首先,您需要从您的 app/Http/Controllers/Controller.php 中移除 AuthorizesRequests 特性,并添加/使用 ExtendedAuthorizesRequest 特性
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use ExtendedResourceAuthorization\Auth\Access\ExtendedAuthorizesRequests;
class Controller extends BaseController
{
use ExtendedAuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
注意
可以通过控制器传递两个参数,即
$extendedResourceAbilities = [
'controller_resource_method_name' => 'policy_resource_ability_name',
'custom_resource_method' => 'custom_resource_method_policy',
'custom_resource_method_without_model' => 'custom_resource_method_without_model'
];
$extendResourceMethodsWithoutModels = ['custom_resource_method_without_model'];
和
可以在相应的模型上设置两个属性,即
/**
* The extended resource abilities which should be authorized when using authorizeResource
*
* @var array
*/
public static $extendedResourceAbilities = [
'controller_resource_method_name' => 'policy_resource_ability_name',
'custom_resource_method' => 'custom_resource_method_policy',
'custom_resource_method_without_model' => 'custom_resource_method_without_model'
];
/**
* The extended resource methods without models which should be authorized when using authorizeResource
*
* @var array
*/
public static $extendResourceMethodsWithoutModels = ['custom_resource_method_without_model'];
通过控制器使用
通过控制器传递两个参数
class BookController extends Controller{
public function __construct(){
$extendedResourceAbilities = [
'controller_resource_method_name' => 'policy_resource_ability_name',
'custom_resource_method' => 'custom_resource_method_policy',
'custom_resource_method_without_model' => 'custom_resource_method_without_model'
];
$extendResourceMethodsWithoutModels = ['custom_resource_method_without_model'];
$this->authorizeResource(Book::class,'book',[],null,$extendedResourceAbilities,$extendedResourceMethodsWithoutModels);
}
}
通过模型使用
您需要更改每个创建的模型
Illuminate\Database\Eloquent\Model
为
ExtendedResourceAuthorization\Model
在模型中定义这两个属性
class Book extends Model {
/**
* The extended resource abilities which should be authorized when using authorizeResource
*
* @var array
*/
public static $extendedResourceAbilities = [
'controller_resource_method_name' => 'policy_resource_ability_name',
'custom_resource_method' => 'custom_resource_method_policy',
'custom_resource_method_without_model' => 'custom_resource_method_without_model'
];
/**
* The extended resource methods without models which should be authorized when using authorizeResource
*
* @var array
*/
public static $extendResourceMethodsWithoutModels = ['custom_resource_method_without_model'];
}
如果您使用的是 Laravel 默认认证和 User 模型,则需要更改
use Illuminate\Foundation\Auth\User as Authenticatable;
为
use ExtendedResourceAuthorization\User as Authenticatable;
通过完成 步骤 1,您可以通过 通过控制器使用 来使用此功能
优先级
通过控制器使用 优先于 通过模型使用
高级用法
您可以探索此包,并使用包提供的特质,例如 AuthorizesRequest, HasExtendedResourceAuthorization,分别用于控制器和模型
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件