Я полагаю, что самым простым способом добиться этого было бы следующее:
- В вашем приложении для привратника измените таблицу Users, чтобы включить отношение разрешений.Примерно так: Пользователь -> имеет много -> разрешений
И эти разрешения могут содержать только название приложения, к которому вы хотите предоставить им доступ (или идентификатор приложения, который вы выбираете)
Затем в вашем config / initializer / doorkeeper.rb - внутри Doorkeeper :: JWT.configure - вы добавляете, к каким приложениям этот конкретный пользователь может получить доступ внутри полезной нагрузки токена, что-то вроде:
token_payload do |opts|
...
token[:permissions] = user.permissions.pluck(:application_name)
end
Если вы используете Doorkeeper без JWT, вы все равно можете передать дополнительную информацию токену, добавив пользовательский ответ на объект ResponseToken, например:
Doorkeeper::OAuth::TokenResponse.send :prepend, CustomTokenResponse
и CustomTokenResponse просто необходимо реализовать методы body
вот так:
module CustomTokenResponse
def body
additional_data = {
'username' => env[:clearance].current_user.username,
'userid' => @token.resource_owner_id # you have an access to the @token object
# any other data
}
# call original `#body` method and merge its result with the additional data hash
super.merge(additional_data)
end
end
дополнительную информацию можно найти в вики портье: https://github.com/doorkeeper-gem/doorkeeper/wiki/Customizing-Token-Response и в самоцвете портье JWT: https://github.com/doorkeeper-gem/doorkeeper-jwt#usage