1

我正在使用一个已经使用 declarative_authorization 来处理用户权限的 Rails 2.3 应用程序。每个用户属于一个组(没有花哨的角色),对某些模型具有权限,主要是常规的 CRUD 操作,但也有一些特殊的操作。这一切都适用于 declarative_authorization,它通常是开箱即用的模式。

我们现在希望允许管理员针对模型类型设置特定用户组的权限。例如,我们创建一个新组 Foo,为其分配一些用户,然后用复选框决定组 Foo 中的用户是否可以 c/r/u/d 模型 Bar 的对象。

我以前用过acl9,我想我知道我怎么能做到这一点。我最近一直是CanCan的粉丝,但我明白如何轻松做到这一点。如果 declarative_authorization 可以做到这一点,我会坚持下去,但我准备硬着头皮切换。

什么插件是实现这一目标的最佳方式?有没有办法让 declarative_authorization 完成这项工作?使用 CanCan 的优雅方式?我应该注意什么问题,例如数据库性能?

我可以说服我将应用程序升级到 Rails 3.1,但我更愿意找到与 2.3 兼容的解决方案。

我见过一些类似的问题,但没有令人满意的答案 Rails Dynamic Role-Based Authorization plugin?

而这个,对于cancan https://github.com/ryanb/cancan/wiki/Role-Based-Authorization

4

1 回答 1

0

我是StoneWall gem 的粉丝 - 授权检查采用 Ruby 块的形式,因此您可以在该块中查找记录并查看相关用户是否具有授权。

没有很多文档,但想法是:

a_user_object.may_read?(object)

如果object是 Todo 实例,则 Stonewall 将查看 Todo 模型并执行该read

# app/models/todo.rb

stonewall do |s|

    s.action :read do |todo, user|
      todo.owner == user  # only the owner of a todo item may read the item
    end
end

这种方法使两件事变得容易:

  1. read只是一个 Ruby 块,所以你想发生的任何事情都可能发生
  2. 动作可以被赋予任意名称,因此如果您想检查用户是否有权评论待办事项(例如),只需创建一个s.action :comment并使用a_user_object.may_comment?(object)
于 2011-10-24T14:10:05.140 回答