Laravel-admin 中 能不能使用 授权策略 policy 呢?

我有个想法,就是在使用laravel-admin的时候,可以让添加的每个子账户在操作某个指定模块的时候,只能看到自己添加的数据,我记得laravel中的授权策略能够实现的。但是在laravel-admin中这个授权策略要怎么使用呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2

问题解决了吗? 我现在也需要在laravel-admin 里用到授权策略,不知怎么使用

4年前 评论
zjnn (楼主) 4年前

我解决了,改动很小,前后端共用一张user表,可用laravel标准的Policy。具体方法Option C.2见:
stackoverflow.com/questions/631668...

思路是:

  1. 仅一张Custom Admin User 表,我这里是Account;

    ...
    class Account extends Administrator //implements MustVerifyEmail
    {
     /**
      * Account uses system connection
      */
     use Notifiable, AdminAuthorizable; //HasPermissions
    ...
  2. 新建 AdminAuthorizable,代码如下;

<?php

namespace App\Admin\Traits;

use Illuminate\Contracts\Auth\Access\Gate;

trait AdminAuthorizable
{
    /**
     * Determine if the entity has the given abilities.
     *
     * @param  iterable|string  $abilities
     * @param  array|mixed  $arguments
     * @return bool
     */
    public function has($abilities, $arguments = [])
    {
        return app(Gate::class)->forUser($this)->check($abilities, $arguments);
    }

    /**
     * Determine if the entity does not have the given abilities.
     *
     * @param  iterable|string  $abilities
     * @param  array|mixed  $arguments
     * @return bool
     */
    public function hasnot($abilities, $arguments = [])
    {
        return ! $this->has($abilities, $arguments);
    }
}
  1. 使用处参考代码如下:

    if( Admin::user()->has('own', $order) ) {
      dd('auth policy works');
    }
  2. 示例Policy(标准laravel方式),省略registerPolicies代码:

    ... 
    class OrderPolicy
    {
     use HandlesAuthorization;
    
     public function own(Account $user, Order $order)
     {
         return $order->account_id == $user->id;
     }
    }
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!