Laravel护照动态范围

时间:2019-06-10 08:10:00

标签: php laravel

有没有一种方法可以设置laravel护照的动态范围,而不是手动输入?

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

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

如何使示波器动态化?我想通过创建一些界面来根据用户的角色来管理作用域

编辑:我可以将解决方案与我的现状联系起来,这确实很有意义,但是您可以在代码行中为我们提供帮助

$token->scopes = user_scopes;

我在用户模型中遇到异常错误Attempt to assign property scopes of non-object,因为如上所述,我已经在User类中添加了您的代码。您能告诉我如何获取范围ID吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试:

  1. 创建一个附加到用户的user_scopes表,该表具有要分配给该用户的作用域

  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