Laravel паспорт динамические прицелы - PullRequest
2 голосов
/ 10 июня 2019

есть ли способ установить динамические области паспорта 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, как уже упоминалось.Можете ли вы просто очистить меня, как я могу получить идентификаторы области?

1 Ответ

1 голос
/ 10 июня 2019

Вы можете попробовать как:

  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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...