[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