gpt4 book ai didi

ruby-on-rails - 使用 CanCan 将索引页面上的 View 限制为 user_id

转载 作者:行者123 更新时间:2023-12-01 04:02:33 25 4
gpt4 key购买 nike

我正在将 Devise 和 Cancan 用于 rails 3.2.6 应用程序。在应用程序中,我允许用户使用在表单中收集的一些信息来创建文档。然后我想允许用户在 localhost:3000/users/1/documents 的文档索引页面上只列出他们的文档,这是有效的。不起作用的是,我试图通过将/users/:id/documents 替换为另一个数字来限制用户查看其他人的文档。

我正在使用 cancan 并尝试了两者

can :index, Document, :user_id => user.id
可以:读取,文档,:user_id => user.id

然后在文档 Controller 索引方法上

if can? :read, Document
@documents = @user.documents
else
redirect_to root_path
end

也试过 :index也......但这不起作用。我也在用 load_and_authorize_resource ..

对我缺少的东西有什么想法吗?

我会说,cancan 正在为我的用户管理和用户 Controller 工作,供管理员创建、列出和编辑用户,所以我知道 cancan 总体上是有效的。它还用于更新和删除用户文档。这只是索引功能不起作用。
class Ability 

include CanCan::Ability

def initialize(user)

user ||= User.new # guest user (not logged in)
if user.id
if user.has_role? :user
can :create, Document
can :read, Document, :user_id => user.id
can :update, Document, :user_id => user.id
end
end
end
end

最佳答案

您必须确保未登录的用户以及 user.id 的用户与文档的 user_id 不同(文档所有者)无权阅读所有文档。

class Ability
include CanCan::Ability

def initialize(account)

user ||= User.new #non-logged-in user

# logged in users
if user.id and user.has_role?(:user)

#content owners
can :manage, Document, :user_id => user.id

#other logged-in users
can [:show, :create], Document

end

end
end

小心你没有像 can :read, :all 这样的线路或 can :read, Document如果您说 cancan 已经在工作,那么您很可能是在某处给予许可。

关于ruby-on-rails - 使用 CanCan 将索引页面上的 View 限制为 user_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com