X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/b255a333c5a1dc1bb1932a00d952fbb457e38478..654d22ed2e30f406d036cb57273678c4406f3535:/app/controllers/api_controller.rb diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 002bd73b8..602b79d69 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -2,6 +2,7 @@ class ApiController < ApplicationController skip_before_filter :verify_authenticity_token before_filter :check_api_readable, :except => [:capabilities] + before_filter :setup_user_auth, :only => [:permissions] after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout @@ -289,4 +290,20 @@ class ApiController < ApplicationController render :text => doc.to_s, :content_type => "text/xml" end + + # External apps that use the api are able to query which permissions + # they have. This currently returns a list of permissions granted to the current user: + # * if authenticated via OAuth, this list will contain all permissions granted by the user to the access_token. + # * if authenticated via basic auth all permissions are granted, so the list will contain all permissions. + # * unauthenticated users have no permissions, so the list will be empty. + def permissions + @permissions = case + when current_token.present? + ClientApplication.all_permissions.select { |p| current_token.read_attribute(p) } + when @user + ClientApplication.all_permissions + else + [] + end + end end