mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 17:46:05 -05:00
FEATURE: Trust level 4 abilities: pin/unpin, close, archive, make invisible, split/merge topic
This commit is contained in:
parent
5b0d8d5ffd
commit
2c725e2779
6 changed files with 36 additions and 23 deletions
|
@ -123,6 +123,9 @@ Discourse.User = Discourse.Model.extend({
|
|||
return Discourse.Site.currentProp('trustLevels').findProperty('id', parseInt(this.get('trust_level'), 10));
|
||||
}.property('trust_level'),
|
||||
|
||||
isElder: Em.computed.equal('trust_level', 4),
|
||||
canManageTopic: Em.computed.or('staff', 'isElder'),
|
||||
|
||||
isSuspended: Em.computed.equal('suspended', true),
|
||||
|
||||
suspended: function() {
|
||||
|
|
|
@ -150,7 +150,7 @@
|
|||
{{render quoteButton}}
|
||||
{{/if}}
|
||||
|
||||
{{#if currentUser.staff}}
|
||||
{{#if currentUser.canManageTopic}}
|
||||
{{render topicAdminMenu content}}
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -58,9 +58,11 @@
|
|||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if currentUser.staff}}
|
||||
<li>
|
||||
<button class='btn btn-admin' {{action resetRead}}><i class='fa fa-times'></i> {{i18n topic.actions.reset_read}}</button>
|
||||
</li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
</div>
|
||||
{{else}}
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue