Merge pull request #4125 from tomhughes/oauth-scopes

Only show granted permissions in the authorized application list
This commit is contained in:
Andy Allan 2023-08-02 15:52:41 +01:00 committed by GitHub
commit a56cdd547e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 1 deletions

View file

@ -3,6 +3,10 @@ class Oauth2Application < Doorkeeper::Application
validate :allowed_scopes
def authorized_scopes_for(user)
authorized_tokens.where(:resource_owner_id => user).sum(Doorkeeper::OAuth::Scopes.new, &:scopes)
end
private
def allowed_scopes

View file

@ -4,7 +4,7 @@
</td>
<td class="align-middle">
<ul class="list-unstyled mb-0">
<% application.scopes.each do |scope| -%>
<% application.authorized_scopes_for(current_user).each do |scope| -%>
<li><%= t "oauth.scopes.#{scope}" %></li>
<% end -%>
</ul>

View file

@ -36,6 +36,32 @@ class Oauth2AuthorizedApplicationsControllerTest < ActionDispatch::IntegrationTe
assert_select "tbody tr", 2
end
def test_index_scopes
user = create(:user)
application1 = create(:oauth_application, :scopes => %w[read_prefs write_prefs write_diary read_gpx write_gpx])
create(:oauth_access_grant, :resource_owner_id => user.id, :application => application1, :scopes => %w[read_prefs write_prefs])
create(:oauth_access_token, :resource_owner_id => user.id, :application => application1, :scopes => %w[read_prefs write_prefs])
create(:oauth_access_grant, :resource_owner_id => user.id, :application => application1, :scopes => %w[read_prefs write_diary])
create(:oauth_access_token, :resource_owner_id => user.id, :application => application1, :scopes => %w[read_prefs write_diary])
get oauth_authorized_applications_path
assert_response :redirect
assert_redirected_to login_path(:referer => oauth_authorized_applications_path)
session_for(user)
get oauth_authorized_applications_path
assert_response :success
assert_template "oauth2_authorized_applications/index"
assert_select "tbody tr", 1
assert_select "tbody tr td ul" do
assert_select "li", :count => 3
assert_select "li", :text => "Read user preferences"
assert_select "li", :text => "Modify user preferences"
assert_select "li", :text => "Create diary entries, comments and make friends"
end
end
def test_destroy
user = create(:user)
application1 = create(:oauth_application)