Rails Rails 用户权限控制问题,如何优雅的实现?

hunkguo · 2013年09月27日 · 最后由 doitian 回复于 2013年10月08日 · 6441 次阅读

没用现成的插件,设计了 user,group,role,action 几张表,用于控制用户的分组、角色,操作等权限组合。比较传统的方法,在程序中考虑这样实现,check(用户 ID,操作名称 (中文名)),在前台代码中出现中文,似乎不是个好主意,而且需要在每个控制器和方法中写入代码。如何用 rails 的逻辑去实现,求给个新思路?

不是有 cancan 吗??

没用过 cancan,我是这么做的,把 action 作为权限控制的最小单位。

  • permission 模型,表中的每一条记录对应一个权限,字段有权限名称和权限的描述。has_many permission_actions

  • permission_action 模型,belongs_to permission,唯一一个字段是记录 action,格式 (namespace/controller#action)。

  • 将权限关联到 group,这样可以通过 current_user 验证是否有访问每个 action 的权限。

    def is_allow_action?(action)
    group.permissions.include?(Permission.find_by_action(action))
    end
    

我觉得 before_filter 就很好了,各个地方的逻辑不同,规则放的位置离得远不好理解。

#2 楼 @chareice cancan 应该也是用 before_filter 和 action 的白名单来实现权限控制的吧。好像最小单位也是 action 吧。

如果比較複雜邏輯的權限,推薦用

gem 'declarative_authorization'
6 楼 已删除

用 cancan 吧,重复造轮子,何必呢。

rbac 真没啥好的,cancan 其实也不是很爽

cancan 不是很好么

cancan + rolify

需要 登录 后方可回复, 如果你还没有账号请 注册新账号