微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我查看了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中创建其他辅助方法.

您可能会担心的主要意思是(至少我这样做):在定义用户无法做到的事情之前,确保您的用户可以对模型执行某些操作.否则你会沮丧地坐在那里思考“但为什么?我从未写过用户不能.”是啊.但你也从未明确写过他可以……

原文地址:https://www.jb51.cc/ruby/268248.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐