权限处理,有 cancan,但不适用所有场景,还有它的维护情况。
一般大家是用什么方式做权限控制的,或者怎么放置权限相关代码的位置?或者自己手写一般哪几个模块设计?
#1 楼 @neverlandxy_naix 方便问下基础代码结构,就是有哪几个文件放置什么目录?新建的目录,还是放在原来的 application controller 和 help 中
简单瞄了下,这个挺好。前面参考 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);
}
};
权限管理有很多种的。
第一,基于角色的管理。就是 role。楼上朋友写 node 代码的就是这种。角色是最简单的,但局限很多。比如管理员是可以删贴的,用户不行。但本贴的作者又是可以删的。这种很简单的逻辑用角色管起来就比较麻烦,不是说不行,至少代码很难看。
第二,基于行动的管理。这个是比较好的方式。轻松解决以上问题。CanCan 就是这种,Pundit 也是。Pundit 是匹配 method name,我觉得不如 CanCan 好。至于 Rails 4 兼容,不是什么大问题,因为 CanCan 代码其实不复杂。
第三,动态的管理。比如 Github 里面我的 Repo 加你做 group memeber,你就可以管理这个 repo 了,虽然没权删除。这个比第二个复杂,需要单独一个 authority model 来管理。这个的应用比较少一点。
综上,CanCan 是比较好的,适合较多的情景。