gpt4 book ai didi

ruby-on-rails - if_attribute 声明性授权

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

我有一个这样的多对多关系:
用户通过附属机构拥有_许多组织,反之亦然。

我正在使用声明性组织,我只希望用户编辑一个特定的组织,如果他是附属的并且 affiliation 的 affiliationtype 属性是一个特定的值。

所以 affiliations 有 3 列,user_id、organization_id 和 affiliationtype_id

我可以:

o = Organization.find(:first)
o.affiliatons[0].user and get the user

现在我想这样做:
has_permission_on [:organizations], :to => :edit do
if_attribute (...)
end

if_attribute 应该查看当前用户是否是 organization.affiliation[?].user 并且如果 organization.affiliation[?].affiliationtype_id = "3"

我希望这是语法问题......我真的需要让它工作。

最佳答案

编辑:

您可以使用 限制从属关系类型intersects_with(&block) :

  has_permission_on [:organizations], :to => :edit do
if_attribute :affiliations => intersects_with {
user.affiliations.with_type_3
}
end

为什么不创建一个 named_scope 来查找 affiliationtype_id = 3 的从属关系?

来自 declarative_authorization documentation :

为了减少 has_permission_on 块中的冗余,规则可能取决于关联对象的权限:
authorization do
role :branch_admin do
has_permission_on :branches, :to => :manage do
if_attribute :managers => contains {user}
end

has_permission_on :employees, :to => :manage do
if_permitted_to :manage, :branch
# instead of
#if_attribute :branch => {:managers => contains {user}}
end
end
end

关于ruby-on-rails - if_attribute 声明性授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439747/

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