【发布时间】:2010-07-21 16:12:19
【问题描述】:
有很多基于角色的授权插件。当您提前知道角色将是什么时,它们会很好地工作。例如,如果我知道我将拥有管理员、super_users 和 not_so_super_users。
我真正想要的是能够创建自定义角色并将该角色分配给用户。此时,我只是想根据用户的自定义角色阻止对控制器/操作的访问。角色将由权限组成。
例如,Jane Doe 可以添加和查看小部件,但不能删除或编辑它们。 John Doe 可以添加、查看和编辑。 Boss 可以添加、查看、编辑和删除。我希望能够检查用户是否有权在一行中访问控制器/操作:
user.is_authorized?
is_authorized(或任何名称)应该足够智能,可以根据用户分配的角色和该角色的权限集确定用户是否获得授权。
我说得有道理吗?有什么东西可以做到这一点吗?
【问题讨论】:
-
如果你做了 user.is_authorized_to?(:add, @widget) .... 这样该方法可以根据你定义的规则进行检查。这都是自定义的,但看起来可读
-
我真的很喜欢它的语法,但是您需要知道第一个参数的关键字(可能每个 CRUD 操作一个)。我想将此逻辑应用于任何操作,包括与零个或多个不同模型交互的操作。在控制器中,您可以使用 before_filter 来检查 user.is_authorized?并在必要时重定向。 is_authorized?可能会检查用户能够访问的路线列表。这里只是头脑风暴...我真正要找的是基于角色的路由授权,而不是基于角色的模型授权
-
不确定有多少逻辑可以保证插件。您必须以某种方式将每个控制器操作映射到一个角色,这就是关键所在。
标签: ruby-on-rails authorization ruby-on-rails-plugins