如何在基于REST的应用程序中进行权限管理?

问题描述 投票:1回答:2

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

考虑下面的例子,我的API中有资源订单和发票,我在前端应用程序中也有路径命令,发票和仪表板,用angular / react编写,为了简单起见,我们应该调用这些页面。我可以将每个角色/用户的权限存储在端点和动词中,但是如何在前端管理同样的事情呢?在示例中,发票,订单和仪表板可能以某种方式使用这两种资源,因此它不是一对一的关系,并且从用户的角度看,他对页面具有权限。我该如何保持这种关系?

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

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

任何人都可以告诉我实现这种功能的最佳实践。在过去没有休息和网络应用程序(如JSF / ASP.NET)的情况下,我没有遇到过这样的问题,因为我只有一个位置来维护权限,但基于REST的应用程序会更改这些规则。

jwt authorization rights-management
2个回答
0
投票

处理此问题的最佳方法是在反应中创建高阶组件。

  1. 用户从Web前端登录后,您应该能够识别他的角色。
  2. 您需要创建角色到页面/组件的映射
  3. 使用高阶组件呈现需要授权的所有其他组件。
  4. 在高阶组件中具有仅在用户被授权时呈现页面/组件的逻辑,或者将其移动到某个其他自定义错误/登录页面。

你可以在这里找到更多信息:https://www.codementor.io/sahilmittal/using-higher-order-components-for-authenticated-routing-i1hcp6pc6

希望这能回答你的问题!!


0
投票

您可能需要查看状态管理。如果您不确定,State Management是一系列独特的变量,它们保存在前端应用程序的“商店”中。您可以在整个应用程序中变异,获取和设置这些变量,并且可以随时随地访问。此外,您的后端没有状态或会话信息,所以仍然是RESTful!

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.