junaid-ahmad-khan/laravel-extended-resource-authorization

1.7 2020-09-17 13:01 UTC

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)。有关更多信息,请参阅 许可证文件