我正在使用已经使用declarative_authorization处理用户权限的Rails 2.3应用程序。每个用户属于一个组(没有花哨的角色),对某些模型具有权限,主要是常规的CRUD操作,但有一些特殊的操作。这一切都适用于declarative_authorization,通常是开箱即用模式。
我们现在希望允许管理员根据模型类型设置特定用户组的权限。例如,我们创建一个新组Foo,为其分配一些用户,然后使用复选框决定组Foo中的用户是否可以c / r / u / d模型栏的对象。
我之前使用过acl9,我想我知道如何才能做到这一点。我最近一直是CanCan的粉丝,但我不看看它是如何轻松的。如果declarative_authorization可以做到这一点,我会坚持下去,但我已经准备好咬紧牙关并切换。
什么插件是实现此目的的最佳方式?有没有办法让declarative_authorization来完成这项工作?使用CanCan的优雅方式?有没有我应该注意的问题,例如数据库性能?
我可以确信将应用程序升级到Rails 3.1,但我更愿意找到兼容2.3的解决方案。
我见过一些类似的问题,但没有令人满意的答案 Rails Dynamic Role-Based Authorization plugin?
这对于康康来说 https://github.com/ryanb/cancan/wiki/Role-Based-Authorization
答案 0 :(得分: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
这种方法简化了两件事:
read
只是一个Ruby块,所以无论你想发生什么事都可以发生s.action :comment
并使用{{1}进行访问即可}