]> source.dussan.org Git - redmine.git/commitdiff
Expose roles details via REST API (#11502).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 12 Oct 2012 17:22:52 +0000 (17:22 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 12 Oct 2012 17:22:52 +0000 (17:22 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10620 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/roles_controller.rb
app/views/roles/show.api.rsb [new file with mode: 0644]
config/routes.rb
test/integration/api_test/roles_test.rb
test/integration/routing/roles_test.rb

index 5f38852670191c296b0dbc49fef1053a17ad9e1d..29e7604dcadcaff6ee7bdaddb1c843a05ea25155 100644 (file)
 class RolesController < ApplicationController
   layout 'admin'
 
-  before_filter :require_admin, :except => :index
-  before_filter :require_admin_or_api_request, :only => :index
-  before_filter :find_role, :only => [:edit, :update, :destroy]
-  accept_api_auth :index
+  before_filter :require_admin, :except => [:index, :show]
+  before_filter :require_admin_or_api_request, :only => [:index, :show]
+  before_filter :find_role, :only => [:show, :edit, :update, :destroy]
 
   def index
     respond_to do |format|
@@ -35,6 +34,12 @@ class RolesController < ApplicationController
     end
   end
 
+  def show
+    respond_to do |format|
+      format.api
+    end
+  end
+
   def new
     # Prefills the form with 'Non member' role permissions by default
     @role = Role.new(params[:role] || {:permissions => Role.non_member.permissions})
diff --git a/app/views/roles/show.api.rsb b/app/views/roles/show.api.rsb
new file mode 100644 (file)
index 0000000..4e81819
--- /dev/null
@@ -0,0 +1,9 @@
+api.role do
+  api.id @role.id
+  api.name @role.name
+  api.array :permissions do
+    @role.permissions.each do |perm|
+      api.permission(perm.to_s)
+    end
+  end
+end
index a7e0bdc568d6607bc3d65972b4c90653fc3309b0..61a580097f5f0381fa51dd13bf60c6d486f9a079 100644 (file)
@@ -289,7 +289,7 @@ RedmineApp::Application.routes.draw do
     end
   end
   resources :custom_fields, :except => :show
-  resources :roles, :except => :show do
+  resources :roles do
     collection do
       match 'permissions', :via => [:get, :post]
     end
index 87affe18c16229c180e6f533c4467d38176b8b77..807e1ffee0baeac6f3b9e53d690018fdad533677 100644 (file)
@@ -66,4 +66,25 @@ class ApiTest::RolesTest < ActionController::IntegrationTest
       end
     end
   end
+
+  context "/roles/:id" do
+    context "GET" do
+      context "xml" do
+        should "return the role" do
+          get '/roles/1.xml'
+
+          assert_response :success
+          assert_equal 'application/xml', @response.content_type
+
+          assert_select 'role' do
+            assert_select 'name', :text => 'Manager'
+            assert_select 'role permissions[type=array]' do
+              assert_select 'permission', Role.find(1).permissions.size
+              assert_select 'permission', :text => 'view_issues'
+            end
+          end
+        end
+      end
+    end
+  end
 end
index 0ec486a07a852fcea01e9d8cb56273543a04426b..401ab0d4849adbd5b2d5134544b8162a345a1183 100644 (file)
@@ -27,6 +27,10 @@ class RoutingRolesTest < ActionController::IntegrationTest
         { :method => 'get', :path => "/roles.xml" },
         { :controller => 'roles', :action => 'index', :format => 'xml' }
       )
+    assert_routing(
+        { :method => 'get', :path => "/roles/2.xml" },
+        { :controller => 'roles', :action => 'show', :id => '2', :format => 'xml' }
+      )
     assert_routing(
         { :method => 'get', :path => "/roles/new" },
         { :controller => 'roles', :action => 'new' }