使用 CanCanCan - 我显然在做一些明显错误的事情
Using CanCanCan - I am clearly doing something obviously wrong
晚上好,
CanCanCan很棒;但是,我认为我遗漏了一些非常明显的东西,因为我的模型逻辑非常简单。
- 生成该内容的登录用户 应该能够读取、更新和删除
- 如果登录用户不是事物作者应该能够阅读和评论事物。
- 未登录的人应该可以阅读 and/or 搜索。
第 1 步和第 3 步有效。但是,第 2 步不起作用 - 如果另一个用户已登录,则尝试查看某物;他们看到 "CanCan::AccessDenied" 除非这是他们的事。
Ability.rb
if user.present?
can :manage, List, user_id: user.id
else
can [:read, :search], List
end
上面代码段中的 user.present?
linked/locked 到 current_user 吗?我试过省略.present?但是,这仍然呈现 CanCan::AccessDenied。
遇到这个意外错误,我以为下面这样的东西会起作用,可惜不行。
if user.present?
can :manage, List, user_id: user.id
elsif @list.find(params[:id]).user != user
can [:read], List
else
can [:read, :search], List
end
对于后代,请在 Roman Alekseiev 提供的内容之上找到我的解决方案。
应用程序控制器
class ApplicationController < ActionController::Base
load_and_authorize_resource :parent
load_and_authorize_resource :child, through: :parent
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= ::User.new
if user.new_record?
can [:read, :search], Parent
can [:read], Child
else
can [:read, :search], ::Parent
can [:read, :create, :delete], Child
can :manage, Parent, user_id: user.id
end
end
如何使用视图中的能力,例如显示。
<% if can? :create, @parent => Child %>
present the child markup/content
<% end %>
从我的角度来看:
def initialize(user)
user ||= ::User.new
if user.new_record?
can [:read, :search] ::List
else
can [:read, :comment], ::List
can :manage, ::List, user_id: user.id
end
尝试过这篇文章,source
晚上好,
CanCanCan很棒;但是,我认为我遗漏了一些非常明显的东西,因为我的模型逻辑非常简单。
- 生成该内容的登录用户 应该能够读取、更新和删除
- 如果登录用户不是事物作者应该能够阅读和评论事物。
- 未登录的人应该可以阅读 and/or 搜索。
第 1 步和第 3 步有效。但是,第 2 步不起作用 - 如果另一个用户已登录,则尝试查看某物;他们看到 "CanCan::AccessDenied" 除非这是他们的事。
Ability.rb
if user.present?
can :manage, List, user_id: user.id
else
can [:read, :search], List
end
上面代码段中的 user.present?
linked/locked 到 current_user 吗?我试过省略.present?但是,这仍然呈现 CanCan::AccessDenied。
遇到这个意外错误,我以为下面这样的东西会起作用,可惜不行。
if user.present?
can :manage, List, user_id: user.id
elsif @list.find(params[:id]).user != user
can [:read], List
else
can [:read, :search], List
end
对于后代,请在 Roman Alekseiev 提供的内容之上找到我的解决方案。
应用程序控制器
class ApplicationController < ActionController::Base
load_and_authorize_resource :parent
load_and_authorize_resource :child, through: :parent
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= ::User.new
if user.new_record?
can [:read, :search], Parent
can [:read], Child
else
can [:read, :search], ::Parent
can [:read, :create, :delete], Child
can :manage, Parent, user_id: user.id
end
end
如何使用视图中的能力,例如显示。
<% if can? :create, @parent => Child %>
present the child markup/content
<% end %>
从我的角度来看:
def initialize(user)
user ||= ::User.new
if user.new_record?
can [:read, :search] ::List
else
can [:read, :comment], ::List
can :manage, ::List, user_id: user.id
end
尝试过这篇文章,source