ruby on rails 4 - How do I restrict a specific scope just to users with a specific role? -
ruby on rails 4 - How do I restrict a specific scope just to users with a specific role? -
so have post model. posts can either published or unpublished. using rolify, cancancan , devise.
what want happen :admin users, should able view post#show action of posts, :member or guest users (i.e. non-logged in) should ever able see post.published posts.
my ability.rb looks this:
if user.has_role? :admin can :manage, :all #member elsif user.has_role? :member can :read, :all can :create, post can :status, post can :update, post |post| post.try(:user) == user end #guest else can :read, :all can :create, post can :status, post end i tried doing this, both :member , guest, gave me endless redirect loop on post#index page - root_path:
can :read, post.published where post.published returns array of posts publication_status = "published".
this how declared on post.rb:
enum publication_status: [ :unpublished, :published ] how accomplish this?
i figured out.
in post#show, did this:
def show if current_user , current_user.has_role? :admin or :editor @post = post.find(params[:id]) else @post = post.published.find(params[:id]) end end that works charm.
if has more elegant way, within ability.rb love know.
i tried many permutations using blocks , jazz in ability.rb nil worked.
i had remove default added set_post method in controller, because cancancan loads_and_authorize resource.
ruby-on-rails-4 devise cancan rolify cancancan
Comments
Post a Comment