我正在制作一个rails项目,并且我正在尝试实施CanCanCan。我安装了gem并运行了命令。然后我将其添加到ability.rb
:
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :update, Post do |post|
post.user == user
end
can :destroy, Post do |post|
post.user == user
end
can :create, Post
can :read, :all
end
end
end
但是,现在在我的项目中,如果我登录其他用户,我仍然可以编辑其他用户的帖子。
对于我失踪的任何帮助将不胜感激。
答案 0 :(得分:1)
通过将config.action_controller.asset_host = "d373p52igaakhgm9.cloudfront.net"
添加到我的posts_controller
答案 1 :(得分:0)
根据CanCanCan文档,
仅在存在实际实例对象时评估该块。 在检查类的权限时(例如在 指数行动)。这意味着任何不依赖的条件 对象属性应移到块外。
不要这样做
can :update, Project do |project| user.admin? # this won't always get called end
这样做
can :update, Project if user.admin?
所以而不是
can :update, Post do |post|
post.user == user
end
can :destroy, Post do |post|
post.user == user
end
改变
can :update, Post if post.user == user
can :destroy, Post if post.user == user
答案 2 :(得分:0)
尝试can :manage, Post, :user_id => user.id
答案 3 :(得分:0)
我设置的方式与nersoh相同,并且该方法适用于我。您是否尝试过授权控制器中的帖子资源?例如,
class PostsController < ActionController::Base
load_and_authorize_resource
end