Commit da0396de56254f90861d5567cffb6fb22a0ae35d
1 parent
ede53a92
Exists in
master
and in
22 other branches
admins: avoid problems with empty roles or environment on resources
Showing
3 changed files
with
15 additions
and
9 deletions
Show diff stats
app/models/environment.rb
| @@ -86,7 +86,9 @@ class Environment < ActiveRecord::Base | @@ -86,7 +86,9 @@ class Environment < ActiveRecord::Base | ||
| 86 | end | 86 | end |
| 87 | 87 | ||
| 88 | def admins | 88 | def admins |
| 89 | - Person.members_of(self).all(:conditions => ['role_assignments.role_id = ?', Environment::Roles.admin(self).id]) | 89 | + admin_role = Environment::Roles.admin(self) |
| 90 | + return [] if admin_role.blank? | ||
| 91 | + Person.members_of(self).all(:conditions => ['role_assignments.role_id = ?', admin_role.id]) | ||
| 90 | end | 92 | end |
| 91 | 93 | ||
| 92 | # returns the available features for a Environment, in the form of a | 94 | # returns the available features for a Environment, in the form of a |
app/models/person.rb
| @@ -33,16 +33,17 @@ class Person < Profile | @@ -33,16 +33,17 @@ class Person < Profile | ||
| 33 | { :select => 'DISTINCT profiles.*', :conditions => ['"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "friendships" ON "friendships"."person_id" = "profiles"."id" WHERE "friendships"."friend_id" IN (%s))' % resources.map(&:id)] } | 33 | { :select => 'DISTINCT profiles.*', :conditions => ['"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "friendships" ON "friendships"."person_id" = "profiles"."id" WHERE "friendships"."friend_id" IN (%s))' % resources.map(&:id)] } |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | - def has_permission_with_admin?(permission, profile) | ||
| 37 | - return true if profile.admins.include?(self) || profile.environment.admins.include?(self) | ||
| 38 | - has_permission_without_admin?(permission, profile) | 36 | + def has_permission_with_admin?(permission, resource) |
| 37 | + return true if resource.blank? || resource.admins.include?(self) | ||
| 38 | + return true if resource.kind_of?(Profile) && resource.environment.admins.include?(self) | ||
| 39 | + has_permission_without_admin?(permission, resource) | ||
| 39 | end | 40 | end |
| 40 | alias_method_chain :has_permission?, :admin | 41 | alias_method_chain :has_permission?, :admin |
| 41 | 42 | ||
| 42 | - def has_permission_with_plugins?(permission, profile) | ||
| 43 | - permissions = [has_permission_without_plugins?(permission, profile)] | 43 | + def has_permission_with_plugins?(permission, resource) |
| 44 | + permissions = [has_permission_without_plugins?(permission, resource)] | ||
| 44 | permissions += plugins.map do |plugin| | 45 | permissions += plugins.map do |plugin| |
| 45 | - plugin.has_permission?(self, permission, profile) | 46 | + plugin.has_permission?(self, permission, resource) |
| 46 | end | 47 | end |
| 47 | permissions.include?(true) | 48 | permissions.include?(true) |
| 48 | end | 49 | end |
app/models/profile.rb
| @@ -795,7 +795,10 @@ private :generate_url, :url_options | @@ -795,7 +795,10 @@ private :generate_url, :url_options | ||
| 795 | end | 795 | end |
| 796 | 796 | ||
| 797 | def admins | 797 | def admins |
| 798 | - self.members_by_role(Profile::Roles.admin(environment.id)) | 798 | + return [] if environment.blank? |
| 799 | + admin_role = Profile::Roles.admin(environment.id) | ||
| 800 | + return [] if admin_role.blank? | ||
| 801 | + self.members_by_role(admin_role) | ||
| 799 | end | 802 | end |
| 800 | 803 | ||
| 801 | def enable_contact? | 804 | def enable_contact? |
| @@ -803,7 +806,7 @@ private :generate_url, :url_options | @@ -803,7 +806,7 @@ private :generate_url, :url_options | ||
| 803 | end | 806 | end |
| 804 | 807 | ||
| 805 | include Noosfero::Plugin::HotSpot | 808 | include Noosfero::Plugin::HotSpot |
| 806 | - | 809 | + |
| 807 | def folder_types | 810 | def folder_types |
| 808 | types = Article.folder_types | 811 | types = Article.folder_types |
| 809 | plugins.dispatch(:content_types).each {|type| | 812 | plugins.dispatch(:content_types).each {|type| |