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

as181920 · February 20, 2014 · Last by billy replied at February 21, 2014 · 4341 hits

权限处理,有 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 是比较好的,适合较多的情景。

You need to Sign in before reply, if you don't have an account, please Sign up first.