diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 20d58bf..f3712f7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,6 +5,11 @@ class ApplicationController < ActionController::Base before_filter :init_noosfero_plugins_controller_filters before_filter :allow_cross_domain_access before_filter :login_required, :if => :private_environment? + before_filter :verify_members_whitelist, :if => :user + + def verify_members_whitelist + render_access_denied unless user.is_admin? || environment.members_whitelist.blank? || environment.in_whitelist?(user) + end def allow_cross_domain_access origin = request.headers['Origin'] diff --git a/app/models/environment.rb b/app/models/environment.rb index 7d64472..df98113 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -295,6 +295,16 @@ class Environment < ActiveRecord::Base settings_items :access_control_allow_origin, :type => Array, :default => [] settings_items :access_control_allow_methods, :type => String + settings_items :members_whitelist, :type => Array, :default => [] + + def in_whitelist?(person) + members_whitelist.include?(person.identifier) + end + + def members_whitelist=(members) + settings[:members_whitelist] = members.split(',').map(&:strip).reject(&:blank?) + end + def news_amount_by_folder=(amount) settings[:news_amount_by_folder] = amount.to_i end diff --git a/app/views/features/index.rhtml b/app/views/features/index.rhtml index fe9ff0a..e9c72ff 100644 --- a/app/views/features/index.rhtml +++ b/app/views/features/index.rhtml @@ -37,6 +37,11 @@ Check all the features you want to enable for your environment, uncheck all the <%= select_organization_approval_method('environment', 'organization_approval_method') %>