laravel-admin-utils/authorization

laravel-admin 的授权工具

v1.0.6 2024-08-24 01:48 UTC

This package is auto-updated.

Last update: 2024-09-24 02:42:21 UTC


README

预览

authorization_legend

安装

composer require laravel-admin-utils/authorization

发布资源:

php artisan vendor:publish --provider="Elegant\Utils\Authorization\AuthorizationServiceProvider"

初始化数据

php artisan authorization:init

‘管理员’拥有所有操作和菜单权限

打开 https:///auth/roles 来管理角色

https:///auth/users 中,您可以给管理员添加角色

通过路由进行动作访问控制

如果您正在使用 laravel-admin 动作并需要进行访问控制,以下以用户的‘复制’操作为例

  • 创建动作 app/Admin/Actions/Replicate.php

    namespace App\Admin\Actions;
    
    use Elegant\Utils\Actions\Response;
    use Elegant\Utils\Actions\RowAction;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Support\Facades\DB;
    
    class Replicate extends RowAction
    {
        /**
         * @var string
         */
        protected $method = 'POST';
    
        /**
         * @return array|null|string
         */
        public function name()
        {
            return 'replicate';
        }
    
        // getHandleUrl() or handle(Model $model) choose one of the two
    
        //========================if permission judgment is required use the method===========================
        /**
         * @return string
         */
        public function getHandleUrl()
        {
            return $this->parent->resource().'/'.$this->getKey().'/replicate';
        }
        
        //============If you don't need permission judgment, use the method=================
        ///**
        // * @param Model $model
        // *
        // * @return Response
        // */
        //public function handle(Model $model)
        //{
        //    try {
        //        DB::transaction(function () use ($model) {
        //            $model->replicate()->save();
        //        });
        //    } catch (\Exception $exception) {
        //        return $this->response()->error('replication failed!: ' . $exception->getMessage() . ')';
        //    }
    
        //    return $this->response()->success('replication successful!')->refresh();
        //}
        
        /**
         * @return void
         */
        public function dialog()
        {
            $this->question('confirm copy?');
        }
    }
  • 控制器复制方法

    use Elegant\Utils\Http\Controllers\HandleController;
    
    class UserController extends AdminController
    {
        public function replicate($id)
        {
            // If permission judgment is required, perform logical processing here
            try {
                $model = User::withTrashed()->find($id);
                DB::transaction(function () use ($model) {
                    $model->replicate()->save();
                });
            } catch (\Exception $exception) {
                return $this->response()->error("replication failed!: {$exception->getMessage()}")->send();
            }
            return $this->response()->success('replication successful!')->refresh()->send();
    
            // If you don't need permission judgment, handle it in App\Admin\Actions\Replicate::handle() logic
            //return $this->handleAction();
        }
    }

关于开关权限

由于 laravel-admin 自身的开关操作是一种更新操作,权限无法独立判断

本节提供另一种动作方法来实现开关操作权限控制,请参考此处