Rails 泛泛而问,权限管理一般大家用什么方法

as181920 · 2014年02月20日 · 最后由 billy 回复于 2014年02月21日 · 4339 次阅读

权限处理,有 cancan,但不适用所有场景,还有它的维护情况。

一般大家是用什么方式做权限控制的,或者怎么放置权限相关代码的位置?或者自己手写一般哪几个模块设计?

我是全部自己手写的

试试 pundit,轻量级。

#1 楼 @neverlandxy_naix 方便问下基础代码结构,就是有哪几个文件放置什么目录?新建的目录,还是放在原来的 application controller 和 help 中

不推荐 cancan 了,将近一年不维护,和 rails4 有兼容问题(虽然有 fork 的版本可以解决)

简单瞄了下,这个挺好。前面参考 google 文章打算手写也规划这么个代码结构,连类名都是这个一样的命名方式。

到时候用的时候具体去看它的细节逻辑哈。多谢。

如果你用 node,我一直只用这一句话

exports.can = function(role) {
    return function(req, res, next) {
        if(req.session.user && req.session.user.role.split(',').indexOf(role) !== -1)
            next();
        else
            res.send(403);
    }
};

#6 楼 @xlaok 这是固定一个规则对不同角色做权限判断吧,很精简,Thx。如果规则多了,估计要分不同 policy 方法和文件。

#7 楼 @as181920 恩呢,复杂的还是应对不了

刚上手 pundit

#9 楼 @shooter 使用体验?坑?感受?

six 试试

#3 楼 @as181920 model 中建立权限表,helper 中增加控制权限的方法即可

#12 楼 @neverlandxy_naix 了解,多谢。有朋友也是自己设计权限接口的几张数据表,然后写 helper 等方法,应该类似。

#11 楼 @fahchen Thanks,这个没的维护,估计不会去用,但手写的话可以参考下哈。

#4 楼 @jasl 没看到 CANCAN 说不支持 RAILS4.0 牙

#15 楼 @bydmm 和 strong parameter 搭配有 bug

#14 楼 @as181920 这个代码就那么几行,现在已经算基本稳定了,不需要啥维护了吧,你该不会是看了最后一条 commit 很久了,然后...

权限管理有很多种的。

第一,基于角色的管理。就是 role。楼上朋友写 node 代码的就是这种。角色是最简单的,但局限很多。比如管理员是可以删贴的,用户不行。但本贴的作者又是可以删的。这种很简单的逻辑用角色管起来就比较麻烦,不是说不行,至少代码很难看。

第二,基于行动的管理。这个是比较好的方式。轻松解决以上问题。CanCan 就是这种,Pundit 也是。Pundit 是匹配 method name,我觉得不如 CanCan 好。至于 Rails 4 兼容,不是什么大问题,因为 CanCan 代码其实不复杂。

第三,动态的管理。比如 Github 里面我的 Repo 加你做 group memeber,你就可以管理这个 repo 了,虽然没权删除。这个比第二个复杂,需要单独一个 authority model 来管理。这个的应用比较少一点。

综上,CanCan 是比较好的,适合较多的情景。

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