首页 > 解决方案 > 如何在基于 REST 的应用程序中进行权限管理?

问题描述

所以,我知道 REST 后端中的资源有多安全,这不是问题所在。我遇到的问题是如何在 REST API 和客户端应用程序/前端管理用户/权限管理?

考虑以下示例,我的 API 中有资源订单和发票,我的前端应用程序中也有路由订单、发票和仪表板,这些都是用 angular/react 编写的,为了简单起见,我们应该调用这些页面。我可以针对端点和动词将每个角色/用户的权限存储在数据库中,这很好但是我如何在前端管理相同的事情?在示例中,发票、订单和仪表板可能会以某种方式使用这两种资源,因此这不是一对一的关系,并且从用户的角度来看,他似乎拥有页面上的权限。我如何维持这种关系?

我是否应该通过将这些前端模块/页面/路由映射到 REST 端点来将这些前端模块/页面/路由存储在后端,但是这种方法是否违反了单一责任原则并阻碍了新客户端应用程序的适应和可扩展性?如果不应该对端点、用户可以在 JWT 中访问的动词进行编码,并让客户端应用程序使用客户端端点和页面之间的某种映射来决定如何处理它,但是在这种情况下,我将增加当我的端点增加时,JWT 的大小呈指数增长?

在我的情况下,我的情况甚至更棘手,因为前端应用程序还负责为用户分配权限。将其视为一个工作流引擎或权限管理,其中管理员用户定义角色并授予不同页面的权限(从用户的角度来看)。

谁能告诉我实现此类功能的最佳实践。在没有休息和像 JSF/ASP.NET 这样的 Web 应用程序的过去,我没有遇到过这样的问题,因为我只有一个位置来维护权利,但基于 REST 的应用程序会改变这些规则。

标签: jwtauthorizationrights-management

解决方案


您可能想查看状态管理。如果您不确定,状态管理是一系列独特的变量,保存在前端应用程序的“存储”中。您可以在整个应用程序中更改、获取和设置这些变量,并且可以从任何地方轻松访问。另外,您的后端没有保存任何状态或会话信息,所以仍然是 RESTful!

在您的情况下,当用户登录时,他们的权限或权限可能作为 JSON 响应的一部分或通过编码的 JWT 出现(这也有助于管理 JWT 的大小,您不必将所有内容都放在那里)。将权限添加到状态中,在生成组件之前,您可以检查用户是否具有正确的权限并选择性地加载组件。你可以对函数调用和 API 请求做同样的事情;没有许可,没有行动。

对于您的权限管理,您仍然可以通过简单的 API 请求来维护它,并且当用户下次登录时,他们的权限会被刷新!

有几个可用于 React 和 Angular 的状态管理库。我熟悉的是Redux (React) 和NGRX (Angular)。还有几十个教程;你不会想要的!


推荐阅读