Ruby on rails 过滤器前的导轨
请帮助我解决此问题: 我有两个设计模型(用户和管理员) 我有一些带有路线的post模型和控制器:Ruby on rails 过滤器前的导轨,ruby-on-rails,devise,Ruby On Rails,Devise,请帮助我解决此问题: 我有两个设计模型(用户和管理员) 我有一些带有路线的post模型和控制器: /posts /posts/80 /posts/80/edit 我希望: 管理员拥有所有访问权限 用户有权访问: /post and /post/80 ( if he is creator of this post ) 我这样做: class PostsController < ApplicationController before_filter :ch
/posts
/posts/80
/posts/80/edit
我希望:
管理员拥有所有访问权限
用户有权访问:
/post
and
/post/80 ( if he is creator of this post )
我这样做:
class PostsController < ApplicationController
before_filter :check_guest_logged_in!, :except => [:index, :show]
.
.
.
private
def check_guest_logged_in!
if user_signed_in?
authenticate_user!
elsif admin_signed_in?
authenticate_admin!
else
redirect_to root_path
end
end
并且他可以访问(即使他不是这篇文章的创建者)
如何解决此问题?
我想要那样的东西
私人的
def check_guest_logged_in!
if user_signed_in?
authenticate_user!
if ( current_user.id == @post.user.id )
else
return false;
end
elsif admin_signed_in?
authenticate_admin!
else
redirect_to root_path
end
end
但是它不起作用我的建议是使用坎坎宝石 这是一个很棒的火车司机 有了cancan你可以做这样的事情
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
我的建议是使用坎坎宝石 这是一个很棒的火车司机 有了cancan你可以做这样的事情
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
代码的根本问题是,您只检查用户是否登录,而不是他们是否是该帖子的所有者。您需要在posts表中设置account_id列,您只需执行before筛选并检查当前用户是否与posts所有者相同,但cancan确实是一个更好的选择,因为它易于配置并保持代码干燥代码的基本问题是,您只需检查用户是否登录,如果他们是那篇文章的主人,那就不是了。您需要在posts表中设置account\u id列,您只需执行before筛选并检查当前用户是否与posts所有者相同,但cancan确实是一个更好的选择,因为它易于配置并保持代码干燥