最近的项目涉及到较为复杂的权限。虽然 cancan 用得很顺畅,但是总禁不住思考其他的解决方案。 于是查看了一些资料和看了别人写的总结,自己也弄了一份列表出来。 http://jianpingz.info/uncategorized/simple_authorisation_review/
解决方案分为两种:
实践并且思考更好的解决方案,是程序员的通病,所以想请求大家: 1.大家在项目里面都怎么做授权的,以及为什么这样么做?算是做个小调查吧。
如果是需要做 RBAC,又不想自己写接口的话,可以使用 cancan 加一个 canard 后者在前者的基础上补充实现了基于角色的访问控制。
后者的功能介绍:
Wraps CanCan and RoleModel up to make role based authorisation really easy in Rails 3.x.
记得 asp.net 中,默认提供了一种权限管理结构,叫 membership,好复杂,很恐怖。 要了解它的体系,并且定制自己的业务,会很痛苦。所以,当初不管项目大小,我都没碰过它。
对于权限,这种业务相关性很高的逻辑,还是尽量自己实现。 关键是要能理解业务,并能先在关系数据库层抽象出来,之后实现代码怎么写都行。 总是在理论、库的层面找方案,方向不太对。
OAuth 2: http://blog.yorkxin.org/posts/2013/10/08/oauth2-ruby-and-rails-integration-review
http://blog.yorkxin.org/posts/2013/11/05/oauth2-tutorial-grape-api-doorkeeper-en
有的东西是权限,有的权限是业务,只有在不同的系统中自己去体会了。
#2 楼 @ChrisLoong 请教如何测试权限?canca 的推荐是在 model 层做测试,但是那并不足够。我目前的项目是在 request 级别做测试,按照不同的 setup 来测不同的 case。感觉很繁琐,但是又没有更好的解决办法。
#4 楼 @debugger 大神,请分享体会:)
#3 楼 @chanshunli 感谢分享,不过我理解的 oauth2 是 authentication 范畴的,不是 authorisation. 暂时不在我研究范畴
#1 楼 @Martin91 对,justin 某次聚会分享了,受用。