小编Jim*_*ini的帖子

构建平台授权权限模型

任何平台(PaaS)身份验证的安全性的一个重要部分是能够基于用户/应用程序或基于身份验证限制和/或定义特定应用程序或用户的"权限"或权限.

现代平台或产品API中的常见权限模型基于"范围"的概念.在我的研究中,GitHub,Facebook,Instagram,Etsy(以及更多)都在他们的OAuth实现中使用这种风格的权限建模.但是,这种"范围"模型似乎只关注外部(即第三方)应用程序如何访问经过身份验证的用户数据.

在内部,权限模型似乎更侧重于基于"角色"的模型(管理员,主持人,用户等)或许多其他自定义实现.

我的问题是:"哪种权限模型最适合现代PaaS,既希望限制用户使用某些操作,又限制第三方应用程序访问用户数据,以及如何以性能意识的方式构建?"

我最初的研究使我对内部和外部使用基于范围的权限模型.不幸的是,构建这样一个系统并非易事.我见过多种创建这种架构的方法:

  1. AR友好的关系DB方式:

    • 使用连接表创建多个表,以获得权限列表,用户可用权限,用户令牌和用户令牌的活动权限之间的多对多关系.

    • 用户可以使用令牌进行身份验证,并指定该令牌可用的权限,直到最初为该用户设置的权限

  2. 聪明的Bit-masking方式:

    • 使用数据集中的简单整数列来存储整数值

    • 以二进制方式访问整数值,使用按位运算符通过将权限表示为单个位来设置,获取,切换(等)用户或其令牌的权限

他们似乎对每个人都有利有弊.AR友好的方式似乎是一个非常灵活的解决方案,但似乎它可能是一个严重的性能损失,因为必须运行多个连接/查询,并且必须在每个经过身份验证的调用上创建ORM模型实例.比特掩码方法看起来非常快速有效,但开发起来不太直观,而且更容易出错.此外,位屏蔽似乎是一个限制性的解决方案,因为它只能轻松地允许一个非常"二进制"的权限模型(可以或不可以),没有中间/快乐媒体,并且它会限制权限基于硬件限制的硬64位限制.

是否有其他方法的权限建模或架构我缺少/没有想到?或者我是否在正确的轨道上并且性能考虑并不是一个大问题(就关系方法而言),因为我正在制定它?

非常感谢!

TL;博士:

哪种权限模型最适合现代PaaS,既要限制用户使用某些操作,又要限制第三方应用程序访问用户数据,以及如何以性能意识的方式构建?

architecture permissions database-design authorization

15
推荐指数
1
解决办法
1674
查看次数

用于引用导入的es6类的正确JSDOC语法是什么?

我正在尝试找出在JSDOC中将外部类指定为params/returns的正确语法.

所以,例如,我有:

import redux from 'redux';

/**
 * @param {object} state
 * @return {{module:redux.Store}}
 */
export function initState(state=initialState) {
  store = redux.createStore(theReducer, Immutable.fromJS(state));
  return store;
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在网络风暴中使用它,"Go To Declaration" Store会把我送到完全无关的地方.

这意味着,我的语法错误(什么是正确的?)或者它是Webstorm中的错误

javascript commonjs jsdoc webstorm ecmascript-6

6
推荐指数
1
解决办法
1405
查看次数

Flowtype:动态扩展类

是否可以为现有类手动定义其他方法?

我的具体用例是蓝鸟promisifyAll():

通过遍历对象的属性并在对象及其原型链上创建每个函数的异步等价物来宣传整个对象... http://bluebirdjs.com/docs/api/promise.promisifyall.html

显然,流量无法自动解决这个问题.所以,我愿意帮助它.问题是如何?

请考虑以下代码

import http from 'http'
import { promisifyAll } from 'bluebird'

promisifyAll(http)

const server = http.createServer(() => { console.log('request is in'); })
server.listenAsync(8080).then(() => {
  console.log('Server is ready to handle connections')
})
Run Code Online (Sandbox Code Playgroud)

Flow在此处给出以下错误:

property `listenAsync`. Property not found in
Server
Run Code Online (Sandbox Code Playgroud)

如果我使用的话不会有任何错误listen.flow非常聪明,可以看出这是模块中定义的真实方法.但是流动listenAsync的动态增加promisifyAll是不可见的

javascript flowtype

6
推荐指数
1
解决办法
1834
查看次数