Node.js REST API权限/角色管理

Node.js REST API权限/角色管理,node.js,rest,express,Node.js,Rest,Express,实际上,我正在基于node.js构建一个RESTFul API,我面临一个问题 域代码已经编写好了,我现在正在尝试管理这个应用程序的访问权限,但我不知道如何处理 事实上,我需要允许/限制用户对ressource的访问。实际上,我考虑过将权限存储在用户的数组中,如下所示: { userName:"foo", userMail:"foo@bar.com", userApiRightsAllowed:[ { uri:"/site/1594656",

实际上,我正在基于node.js构建一个RESTFul API,我面临一个问题

域代码已经编写好了,我现在正在尝试管理这个应用程序的访问权限,但我不知道如何处理

事实上,我需要允许/限制用户对ressource的访问。实际上,我考虑过将权限存储在用户的数组中,如下所示:

{
   userName:"foo",
   userMail:"foo@bar.com",
   userApiRightsAllowed:[
      {
         uri:"/site/1594656",
         verb:"post",
      },
      {
         uri:"/sites",
         verb:"get",
      }
   ]
}
在自定义中间件中,我检查用户权限是否包含req.url和req.verb

如果可以的话,他可以访问ressource。在另一种情况下,他得到了403禁止

问题

问题是何时需要获取/站点。我授权用户获取/sites,但他无权查看像/sites/65982这样的站点详细信息

但在我的站点列表中,他将看到其中的所有站点和/sites/65982

问题

以最小粒度管理API访问权限的最佳方法是什么:资源和方法

我如何才能使我的代码正常工作,并且用户只能看到他能看到的站点

编辑:我正在使用MongoDb数据库


提前感谢

假设您使用的是
express
(基于标签),这是一个很好的选项,可以将应用程序的功能扩展到express提供的基本REST功能之外。Sails有一些有用的插件,用于帮助管理角色、用户和权限:


因此,使用您的示例配置,当用户foo请求
/sites
时,只有
/site/1594656
应该在那里结束?数据库记录是否以任何方式指向网站所属的用户?我在用户和其他集合之间没有任何关系来管理权限。我想避免这种情况,因为这个域中的配置太多如果一个站点只能属于一个用户,那么将用户id作为外键类型关系添加到站点文档中似乎是一个相对简单的解决方案。否则,对于每个端点,您需要对来自数据库的数据进行后处理,以使其适合用户的访问。然后,还有其他子信息需要管理,它们与父项无关。在这种情况下,我有6个子级别需要处理,并且必须修改每个请求以检查我推荐的用户权限。是的,这也是一个很好的请求。sails-auth基于sails-generate-auth