[Git][noosfero/noosfero][master] 2 commits: api: return permissions for environment

Leandro Nunes gitlab at mg.gitlab.com
Fri Oct 7 10:29:29 BRT 2016


Leandro Nunes pushed to branch master at Noosfero / noosfero


Commits:
1199c0c8 by Victor Costa at 2016-10-05T18:40:03-03:00
api: return permissions for environment

- - - - -
f0c37fa8 by Leandro Nunes at 2016-10-07T13:27:51+00:00
Merge branch 'environment-api-permissions' into 'master'

api: return permissions for environment



See merge request !1025
- - - - -


5 changed files:

- app/api/entities.rb
- app/api/v1/environments.rb
- app/models/environment.rb
- test/api/environment_test.rb
- test/unit/environment_test.rb


Changes:

=====================================
app/api/entities.rb
=====================================
--- a/app/api/entities.rb
+++ b/app/api/entities.rb
@@ -302,6 +302,9 @@ module Api
       expose :terms_of_use
       expose :top_url, as: :host
       expose :settings, if: lambda { |instance, options| options[:is_admin] }
+      expose :permissions, if: lambda { |environment, options| options[:current_person].present? } do |environment, options|
+        environment.permissions_for(options[:current_person])
+      end
     end
 
     class Tag < Entity


=====================================
app/api/v1/environments.rb
=====================================
--- a/app/api/v1/environments.rb
+++ b/app/api/v1/environments.rb
@@ -18,7 +18,7 @@ module Api
           else
             local_environment = Environment.find(params[:id])
           end
-          present_partial local_environment, :with => Entities::Environment, :is_admin => is_admin?(local_environment)
+          present_partial local_environment, with: Entities::Environment, is_admin: is_admin?(local_environment), current_person: current_person
         end
 
       end


=====================================
app/models/environment.rb
=====================================
--- a/app/models/environment.rb
+++ b/app/models/environment.rb
@@ -1008,6 +1008,10 @@ class Environment < ApplicationRecord
     HashWithIndifferentAccess.new :name => name
   end
 
+  def permissions_for(person)
+    person.role_assignments.where(resource: self).map {|ra| ra.role.permissions}.flatten.uniq
+  end
+
   private
 
   def default_language_available


=====================================
test/api/environment_test.rb
=====================================
--- a/test/api/environment_test.rb
+++ b/test/api/environment_test.rb
@@ -67,4 +67,22 @@ class EnvironmentTest < ActiveSupport::TestCase
     json = JSON.parse(last_response.body)
     assert_equal context_env.id, json['id']
   end
+
+  should 'return no permissions for the current person that has no role in the environment' do
+    login_api
+    environment = Environment.default
+    get "/api/v1/environment/default?#{params.to_query}"
+    json = JSON.parse(last_response.body)
+    assert_equal [], json['permissions']
+  end
+
+  should 'return permissions for the current person in the environment' do
+    login_api
+    environment = Environment.default
+    environment.add_admin(person)
+    get "/api/v1/environment/default?#{params.to_query}"
+    json = JSON.parse(last_response.body)
+    assert_equal environment.permissions_for(person), json['permissions']
+  end
+
 end


=====================================
test/unit/environment_test.rb
=====================================
--- a/test/unit/environment_test.rb
+++ b/test/unit/environment_test.rb
@@ -1721,4 +1721,11 @@ class EnvironmentTest < ActiveSupport::TestCase
     assert_respond_to Environment.new, :https_feed_proxy
   end
 
+  should 'list permissions for person' do
+    environment = Environment.default
+    person = create_user.person
+    environment.add_admin(person)
+    assert !environment.permissions_for(person).empty?
+  end
+
 end



View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/675038c7234b9d8efd92ff26d8f67c316694543a...f0c37fa89e65ede1eb3f545395d75b34c4a09849
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20161007/527178e0/attachment-0001.html>


More information about the Noosfero-dev mailing list