gpt4 book ai didi

ruby-on-rails - 继承资源和CanCan 3层嵌套

转载 作者:数据小太阳 更新时间:2023-10-29 08:06:07 29 4
gpt4 key购买 nike

我在结合继承资源的 CanCan 模型中进行 3 层嵌套时遇到问题。我读到我们应该将所有内容嵌套到 2 层,但我必须将所有内容都放在 account 模型下,现在我已经尝试在 CanCan 中这样做:

load_and_authorize_resource :account
load_and_authorize_resource :project, :through => :account
load_and_authorize_resource :model, :through => :project

这给了我一个值为@project 的@account 变量,就像它正在覆盖它一样。 @project 应该是什么,@model 也是。这是我的错,CanCan 的,Inherited Resources 还是只是 CanCan 不支持 3 层嵌套?此外,我在 IR 中为 ModelsController 执行此操作。

belongs_to :account, :finder => :find_by_name! do
belongs_to :project, :finder => :find_by_name!
end

另一件奇怪的事情是当我从 CanCan 的定义中删除部分 load_and_ 时。它可以工作,但我读到不使用 load 部分可能很危险。

我可以只使用 authorize_resource 还是应该用 CanCan 做些什么?

最佳答案

据我所知,您的授权是正确的。

CanCan gem 的开发者 ryan 发布了它的行为方式:https://github.com/ryanb/cancan/issues/127#issuecomment-364475

这意味着你的

load_and_authorize_resource :account
load_and_authorize_resource :project, :through => :account
load_and_authorize_resource :model, :through => :project

将以这样的 block 结束(此处:创建操作。对于其他操作,应最后授权!和 @model 更改):

@account = Account.find(params[:account_id])
authorize! :read, @account
@project = @account.projects.find(params[:project_id])
authorize! :read, @project
@model = @project.models.build
authorize! :new, @model

我希望这个答案可以帮助开发人员寻找嵌套的 cancan 授权:-)。

来源:https://github.com/ryanb/cancan/issues/127#issuecomment-364475


ps:/accounts/1/projects/2/models/new 的错误行为:

load_and_authorize_resource :project
load_and_authorize_resource :model, :through => :project

这是一个安全问题,因为这样就可以了

@project = Project.find(params[:project_id]) [...]

,并且不检查当前帐户是否允许读取链接帐户“1”。它不会检查项目“2”是否真的是帐户“1”的项目。

关于ruby-on-rails - 继承资源和CanCan 3层嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5394081/

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