+ {{/if}}
{{else}}
diff --git a/lib/guardian.rb b/lib/guardian.rb
index dbe0526d82f..e26a04bafcf 100644
--- a/lib/guardian.rb
+++ b/lib/guardian.rb
@@ -71,6 +71,26 @@ class Guardian
end
end
+ def can_create?(klass, parent=nil)
+ return false unless authenticated? && klass
+
+ # If no parent is provided, we look for a can_create_klass?
+ # custom method.
+ #
+ # If a parent is provided, we look for a method called
+ # can_create_klass_on_parent?
+ target = klass.name.underscore
+ if parent.present?
+ return false unless can_see?(parent)
+ target << "_on_#{parent.class.name.underscore}"
+ end
+ create_method = :"can_create_#{target}?"
+
+ return send(create_method, parent) if respond_to?(create_method)
+
+ true
+ end
+
# Can the user edit the obj
def can_edit?(obj)
can_do?(:edit, obj)
@@ -82,7 +102,7 @@ class Guardian
end
def can_moderate?(obj)
- obj && is_staff?
+ obj && authenticated? && (is_staff? || (obj.is_a?(Topic) && @user.has_trust_level?(:elder)))
end
alias :can_move_posts? :can_moderate?
alias :can_see_flags? :can_moderate?
diff --git a/lib/guardian/topic_guardian.rb b/lib/guardian/topic_guardian.rb
index 50d240de27d..3e08af064ba 100644
--- a/lib/guardian/topic_guardian.rb
+++ b/lib/guardian/topic_guardian.rb
@@ -1,25 +1,5 @@
#mixin for all guardian methods dealing with topic permisions
module TopicGuardian
- # Can the user create a topic in the forum
- def can_create?(klass, parent=nil)
- return false unless authenticated? && klass
-
- # If no parent is provided, we look for a can_i_create_klass?
- # custom method.
- #
- # If a parent is provided, we look for a method called
- # can_i_create_klass_on_parent?
- target = klass.name.underscore
- if parent.present?
- return false unless can_see?(parent)
- target << "_on_#{parent.class.name.underscore}"
- end
- create_method = :"can_create_#{target}?"
-
- return send(create_method, parent) if respond_to?(create_method)
-
- true
- end
def can_remove_allowed_users?(topic)
is_staff?
@@ -41,7 +21,7 @@ module TopicGuardian
# No users can create posts on deleted topics
return false if topic.trashed?
- is_staff? || (not(topic.closed? || topic.archived? || topic.trashed?) && can_create_post?(topic))
+ is_staff? || (authenticated? && user.has_trust_level?(:elder)) || (not(topic.closed? || topic.archived? || topic.trashed?) && can_create_post?(topic))
end
# Editing Method
diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb
index 39267f94730..936704940a4 100644
--- a/spec/components/guardian_spec.rb
+++ b/spec/components/guardian_spec.rb
@@ -409,6 +409,10 @@ describe Guardian do
it "allows new posts from admins" do
Guardian.new(admin).can_create?(Post, topic).should be_true
end
+
+ it "allows new posts from elders" do
+ Guardian.new(elder).can_create?(Post, topic).should be_true
+ end
end
context 'archived topic' do
@@ -728,6 +732,10 @@ describe Guardian do
Guardian.new(admin).can_moderate?(topic).should be_true
end
+ it 'returns true when trust level 4' do
+ Guardian.new(elder).can_moderate?(topic).should be_true
+ end
+
end
end