分享
为什么问答平台  ›  专栏  ›  技术社区  ›  techguru

Laravel Passport动态范围 - Laravel passport dynamic scopes

  •  1
  • techguru  · 技术社区  · 6 天前

    是否有方法设置Laravel Passport的动态范围而不是手动键入?

    我试图创建一个具有作用域名称和描述的表(MySQL),创建了一个模型作用域,但该模型在AuthServiceProvider中不起作用。

    Passport::tokensCan([
               'view-dashboard' => 'View the contents of dashboard',
               'view-reports'   => 'View the detailed reports'
           ]);
    

    如何使范围动态化?我想通过创建一些界面来基于用户角色管理作用域

    1 回复  |  直到 6 天前
        1
  •  1
  •   Vikash Pathak    6 天前

    您可以尝试如下操作:

    1. 创建一个附加到您的用户的用户范围表,该表具有您要分配给该用户的范围。

    2. 在用户类中重载withaccesstoken()方法,该方法是hasapitokens特性的一部分。使用此钩子从该用户的数据库中提取作用域并将其分配给访问令牌:

    public function withAccessToken($accessToken)
        {
            $this->accessToken = $accessToken;
    
            $token = $this->token();
            $token->scopes = $this->user_scopes;
            $token->save();
    
            return $this;
        }
    

    如果需要完全的灵活性,请尝试扩展并重写src/bridge/scoperepository类

    // in App\Providers\AppServiceProvider:
    
    use App\ScopeRepository;
    use Illuminate\Support\ServiceProvider;
    use Laravel\Passport\Bridge\ScopeRepository as PassportScopeRepository;
    
    class AppServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->bind(PassportScopeRepository::class, ScopeRepository::class);
        }
    }
    
    

    请按照此处了解完整的详细信息。 https://github.com/laravel/passport/issues/195