在现代平台或产品API中发现的通用权限模型基于“范围”的概念.在我的研究中,GitHub,Facebook,Instagram,Etsy(和更多)都在OAuth实现中使用这种权限建模风格.然而,这个“范围”模型似乎只关心外部(即第三方)应用程序如何访问经过身份验证的用户的数据.
在内部,权限模型似乎更侧重于基于“角色”的模型(管理员,主持人,用户等)或许多其他自定义实现.
我的问题是:“什么权限模型最适合现代化的PaaS,它既要限制用户的某些操作,也可以限制第三方应用程序访问用户的数据,以及如何以性能意识的方式进行架构?
我的初步研究使我对内容和外部使用基于范围的权限模型.不幸的是,构建这样的系统并不是微不足道的.我已经看到了创建这样一个架构的多种方法:
> AR友好关系数据库方式:
>使用连接表创建多个表,用于权限列表,用户可用权限,用户令牌和用户令牌的活动权限之间的多对多关系.
>用户可以使用令牌进行身份验证,并指定最多为该用户设置的权限,在该令牌上可用的许可权限
>聪明的位掩蔽方式:
>在数据集中使用一个简单的整数列来存储整数值
>以二进制方式访问整数值,使用按位运算符通过将权限表示为单个位来设置,获取,切换(等)用户或其令牌的权限
他们似乎对每个人都有利弊. AR友好的方式似乎是一个非常灵活的解决方案,但也可能是一个严重的性能问题,因为必须运行多个连接/查询,并且必须在每个经过身份验证的调用上创建ORM模型实例. Bit-masking方法似乎是非常快速和有效的,但是开发时不太直观,并且更容易出错.另外,位掩码似乎是一个限制性的解决方案,它只会容易地允许一个非常“二进制”的权限模型(可以或不能做),没有中等面积/快乐媒体,并且它将限制权限基于硬件限制的硬64位限制.
有没有其他方法的权限建模或架构,我错过/没有想到?或者我在正确的轨道上,性能考虑不是像我正在做的那样巨大的关注(就关系方法而言)
非常感谢!
TL;博士:
什么权限模型最适合现代PaaS,既要限制用户的某些操作,又限制第三方应用程序访问用户的数据,以及如何以有意识的方式进行架构设计?
解决方法
http://static.springsource.org/spring-security/site/docs/current/reference/springsecurity.html
模式:
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html
OAuth的: