Ruby on Rails:我需要一些帮助来设计一个有助于在整个应用程序中集中权限的gem

时间:2011-07-25 21:04:58

标签: ruby-on-rails ruby

所以,我的app非常大,我正在努力减少代码。困扰我的一件事是每次我们需要检查用户是否可以做某事时,我们需要在应用程序代码中的多个位置使用相同的if语句。我看过一些据说可以处理权限和角色的宝石,但是它们似乎都不适合我需要的控制级别。

基本上,所有权限都基于4件事:

  1. CURRENT_USER
  2. current_account
  3. current_account_permissions#帐户可以/不可以做的一堆布尔值
  4. 我们目前正在处理的对象
  5. 现在,前三个在会话期间永远不会改变(在大多数情况下无论如何都是如此),所以如果不管怎么说,只有一次将这些存储在宝石中,那将是更加光彩照人。

    因此,我对安装完宝石后如何定义(简单)方法的设想看起来像这样:

    can edit_content?(content) do
        if (current_user.role >= User::MANAGER or content.user_id == current_user.id)
            return true
        else
            return false
        end
    end
    

    然后,在我看来,这样的事情:

    <% if can :edit_content?(content) %>
    ...
    <% end >
    

    所以,这个gem会有点(auth系统必须使用current_user,current_account)特定于我的应用程序的设置,但我认为gem的想法是解决重复权限检查问题的最佳方法。

    感谢所有帮助。谢谢! = d

1 个答案:

答案 0 :(得分:1)

已经完成,做得很好。建议您查看CanCan gem:https://github.com/ryanb/cancan