首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web服务上的Rails授权

Web服务上的Rails授权
EN

Stack Overflow用户
提问于 2012-01-25 00:46:09
回答 2查看 264关注 0票数 4

我的rails应用程序几乎是几个web服务的前端。我持久化我的用户模型,仅此而已。我需要向我的web应用程序添加授权,使用Devise进行身份验证。我注意到CanCan和acl9似乎主要在ActiveRecord模型的实例上工作。CanCan或acl9还能满足我的需求吗?对于在我的情况下使用这两个库,有什么建议吗?

我是否应该寻找在操作而不是实例上更有效的东西?

另外,这两个系统都是基于角色的系统,我正在考虑使用基于权限的系统。它们还会是一个很好的组合吗?

EN

回答 2

Stack Overflow用户

发布于 2012-02-13 14:56:01

我不能代表acl9说话。然而,cancan维基确实声称“如果没有提供的话,可以很容易地制作您自己的模型适配器”。https://github.com/ryanb/cancan/wiki/Model-Adapter换句话说,即使您没有使用ActiveRecord,您仍然可以使用cancan。

再说一次,如果你不打算拥有角色,那么你在cancan中的能力定义可能有点多余,例如:

代码语言:javascript
复制
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)

    can :create, Widget if user.has_permission(:create_widgets)
    can :delete, Widget if user.has_permission(:delete_widgets)
    can :herp, Derp if user.has_permission(:herp_derp)
  end
end

如果你能使用cancan作为它的控制器操作授权方法,那就太好了,但我不知道这是否可能。祝好运。

票数 1
EN

Stack Overflow用户

发布于 2015-01-23 04:49:52

只是(最后:)对acl9的回答。

Acl9由两个非常独立的部分组成,Access Control Subsystem是您放入控制器中的所有授权内容,Role Subsystem是设置/检查/删除经过身份验证的用户的角色。

访问控制子系统唯一调用的current_user.has_role?( role, obj=nil)。因此,角色子系统对ActiveRecord、关联、数据库等零依赖。是一个助手(a helper,acts_as_authorization_subject),它将依赖于ActiveRecord的has_role?方法添加到类中,但这是完全可选的,您可以自由实现自己的has_role?方法(也可以回退到调用super来获取acl9方法),并随心所欲地实现访问检查。所以,你说你do持久化你的用户模型,但是假设你想让你的用户有一个角色是学校的管理员,但是那个学校是一个远程系统的web服务调用。

代码语言:javascript
复制
## in your model
class User < ActiveRecord::Base

  def has_role? role, obj=nil
    role == :admin  &&
      obj == school &&
      school[:admin] == id  # <-- just making up how we know we're the admin of the remote school
    end
  end

  def school
    @school ||= School.get_by_user_id(id)
  end
end

## in your controller
class SomeController < ApplicationController
  before_action :set_school

  access_control do
    allow :admin, of: :school
  end

  private
  def set_school
    @school = School.get_by_id(params[:school_id])
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8990640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档