Rails 大家怎么做授权?

yue · 2014年12月21日 · 最后由 yue 回复于 2014年12月26日 · 2993 次阅读

最近的项目涉及到较为复杂的权限。虽然 cancan 用得很顺畅,但是总禁不住思考其他的解决方案。 于是查看了一些资料和看了别人写的总结,自己也弄了一份列表出来。 http://jianpingz.info/uncategorized/simple_authorisation_review/

解决方案分为两种:

  1. 入门,小型到中型的系统,可使用 CanCan,节省自己写通用接口的时间,不需要 role related tables,简单灵活。
  2. 采用 role-based authorisation 的理论,资源的权限都是基于角色的,需要额外的 tables 来定义角色。代表有 acl9 和 declarative_authorization

实践并且思考更好的解决方案,是程序员的通病,所以想请求大家: 1.大家在项目里面都怎么做授权的,以及为什么这样么做?算是做个小调查吧。

  1. 还有什么好的授权方面的资料推荐?
  2. 大型的系统,比如淘宝,微信,银行这些是怎么做授权的

如果是需要做 RBAC,又不想自己写接口的话,可以使用 cancan 加一个 canard 后者在前者的基础上补充实现了基于角色的访问控制。

后者的功能介绍:

Wraps CanCan and RoleModel up to make role based authorisation really easy in Rails 3.x.

记得 asp.net 中,默认提供了一种权限管理结构,叫 membership,好复杂,很恐怖。 要了解它的体系,并且定制自己的业务,会很痛苦。所以,当初不管项目大小,我都没碰过它。

对于权限,这种业务相关性很高的逻辑,还是尽量自己实现。 关键是要能理解业务,并能先在关系数据库层抽象出来,之后实现代码怎么写都行。 总是在理论、库的层面找方案,方向不太对。

有的东西是权限,有的权限是业务,只有在不同的系统中自己去体会了。

#2 楼 @ChrisLoong 请教如何测试权限?canca 的推荐是在 model 层做测试,但是那并不足够。我目前的项目是在 request 级别做测试,按照不同的 setup 来测不同的 case。感觉很繁琐,但是又没有更好的解决办法。

#4 楼 @debugger 大神,请分享体会:)

#3 楼 @chanshunli 感谢分享,不过我理解的 oauth2 是 authentication 范畴的,不是 authorisation. 暂时不在我研究范畴 😄

#1 楼 @Martin91 对,justin 某次聚会分享了,受用。

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