gpt4 book ai didi

ruby-on-rails - Rails 3.1 中的授权 : CanCan, CanTango,declarative_authorization?

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

我看过 declarative_authorization、CanCan 和 CanTango。他们都擅长向应用程序添加授权,但我想知道如何向模型的特定实例添加授权,即一个人可以在一个项目中拥有管理访问权限并且只有有限(阅读少于管理:有限更新等)在另一个。

你能有更好的方法吗?如果我的问题听起来太琐碎,我深表歉意。这可能是因为我是 RoR 的新手。

谢谢,
约翰

最佳答案

因为我知道 CanCan 和 declarative_authorization,并且我对两者都实现了基于角色的授权,所以我推荐 CanCan。只有我的两分钱。

示例 (未经测试,不幸的是我无法在这里测试,也无法访问我的代码)

所以假设我们有一个这样的结构:

class User < ActiveRecord::Base
belongs_to :role
end

class Role < ActiveRecord::Base
has_many :users

# attributes: project_read, project_create, project_update
end

然后,CanCan 可能看起来像这样:
class Ability
include CanCan::Ability

def initialize(user)
@user = user
@role = user.role

# user can see a project if he has project_read => true in his role
can :read, Project if role.project_read?

# same, but with create
can :create, Project if role.project_create?

# can do everything with projects if he is an admin
can :manage, Project if user.admin?
end

end

您可以在 github 上的 CanCan wiki 中找到您需要的所有信息。个人推荐阅读:
  • https://github.com/ryanb/cancan/wiki/Defining-Abilities
  • https://github.com/ryanb/cancan/wiki/Defining-Abilities-with-Blocks
  • https://github.com/ryanb/cancan/wiki/Authorizing-Controller-Actions

  • 基本上,您只需要扩展上面的示例以通过您的关系包含您的角色。为简单起见,您还可以在 ability.rb 中创建其他辅助方法。 .

    您可能会接受的主要平均警告(至少我是这样):在定义用户不能做什么之前,请确保您的用户可以对模型执行某些操作。否则你会沮丧地坐在那里想“但是为什么?我从来没有写过用户不能。”。是的。但是你也从来没有明确写过他可以......

    关于ruby-on-rails - Rails 3.1 中的授权 : CanCan, CanTango,declarative_authorization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8906237/

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