Ruby on rails 遗传资源和CanCan 3层嵌套
我有一个问题,在CanCan结合继承资源的3层嵌套模型。我曾读到,我们应该将所有内容嵌套到两个级别,但我必须将所有内容放在Ruby on rails 遗传资源和CanCan 3层嵌套,ruby-on-rails,ruby,cancan,nested,inherited-resources,Ruby On Rails,Ruby,Cancan,Nested,Inherited Resources,我有一个问题,在CanCan结合继承资源的3层嵌套模型。我曾读到,我们应该将所有内容嵌套到两个级别,但我必须将所有内容放在帐户模型下,现在我尝试在CanCan中这样做: load_and_authorize_resource :account load_and_authorize_resource :project, :through => :account load_and_authorize_resource :model, :through => :project 这给了我一
帐户模型下,现在我尝试在CanCan中这样做:
load_and_authorize_resource :account
load_and_authorize_resource :project, :through => :account
load_and_authorize_resource :model, :through => :project
这给了我一个@account变量,它的值是@project,就像它正在覆盖它一样@项目是应该的,也是@model。是我的错,CanCan的错,继承的资源还是CanCan不支持三层嵌套?此外,我在IR中为ModelsController执行此操作
belongs_to :account, :finder => :find_by_name! do
belongs_to :project, :finder => :find_by_name!
end
另一件奇怪的事情是当我从CanCan的定义中删除零件load\u和
。然后它就可以工作了,但我已经读到不使用load
部件可能会很危险
我可以只使用授权资源吗
或者我应该对CanCan做些什么吗?据我所知,您的授权是正确的
CanCan gem的开发者ryan发布了这一行为:
这意味着你的
load_and_authorize_resource :account
load_and_authorize_resource :project, :through => :account
load_and_authorize_resource :model, :through => :project
将在这样的块中结束(此处:创建操作。对于其他操作,应最后授权!和@model更改):
我希望这个答案可以帮助开发人员寻找嵌套的cancan授权:-)
资料来源:
ps:accounts/1/projects/2/models/new的错误行为:
load_and_authorize_resource :project
load_and_authorize_resource :model, :through => :project
这是一种安全问题,因为这样就可以了
@project=project.find(参数[:project\u id])
[……]
,并且不检查当前帐户是否允许读取链接帐户“1”。
它不会检查项目“2”是否真的是帐户“1”的项目。我不知道CanCan支持多少级别,但您可以自己加载,然后只调用authorize\u resource
方法。您可以使用authorize\u资源,只需确保在authorize\u资源之前使用before\u过滤器进行加载即可。
load_and_authorize_resource :project
load_and_authorize_resource :model, :through => :project