Sha256: 6456a8e719bcf31fd29ec0a58fc711ac5951d23332f209194b740c055203b691

Contents?: true

Size: 703 Bytes

Versions: 3

Compression:

Stored size: 703 Bytes

Contents

# frozen_string_literal: true
module Thredded
  class PostPolicy
    # @param user [Thredded.user_class]
    # @param post [Thredded::Post]
    def initialize(user, post)
      @user = user
      @post = post
    end

    def create?
      @user.thredded_admin? || !@post.postable.locked? && messageboard_policy.post?
    end

    def update?
      @user.thredded_admin? || own_post? || messageboard_policy.moderate?
    end

    def destroy?
      @post.postable.first_post != @post && update?
    end

    private

    def messageboard_policy
      @messageboard_policy ||= MessageboardPolicy.new(@user, @post.messageboard)
    end

    def own_post?
      @user.id == @post.user_id
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
thredded-0.3.2 app/policies/thredded/post_policy.rb
thredded-0.3.1 app/policies/thredded/post_policy.rb
thredded-0.3.0 app/policies/thredded/post_policy.rb