【问题标题】:How to vary levels of authorization(permissions) in node js如何在节点 js 中改变授权级别(权限)
【发布时间】:2017-11-29 19:14:30
【问题描述】:

我正在创建一个基本的商业网络应用程序,它应该有两个授权级别。不过,我不只是想保护 API 端点。我希望不同级别的用户在同一个 url 上看到不同的页面。例如,管理员在主页上看到两个按钮,而销售代表只看到一个按钮,因为他们不应该被允许访问第二个按钮后面的内容。

我想做的是在我的 MySQL 用户表中创建一个“管理员”布尔值。一旦用户登录,该字段的值应该以某种方式与用户保持一致。因此,如果我是管理员并且我登录了,类似会话之类的东西会携带我是管理员的信息,允许我在 AngularJS 组件中检查该信息,从而加载正确的 templateUrl。

我的组件顶部会有这样的东西:

var tempUrl
if (user.admin) tempUrl = 'home-page/reports.template.html'
else tempUrl = 'home-page/reports-short.template.html'

angular.
  module('reports').
  component('reports', {
    templateUrl: tempUrl, ...

我已经在自己的身份验证方案中使用 JWT 来保护我的 API 端点,我想继续为每个登录的用户分配一个,以保护我的所有 API 端点。

我不在乎我是否违反了 REST 的任何原则,我只需要一种方法让客户端保留我以后可以在我的 AngularJS 组件中检查的信息。

【问题讨论】:

  • 您是否使用模板库来呈现您的页面?您可以在提供 HTML 时设置一个 JavaScript 变量。 安全说明 无论您如何解决问题,您都希望由后端处理安全性。前端应该只隐藏一些东西来帮助用户体验。
  • 如果你是这个意思,我没有使用像玉/哈巴狗这样的东西。一切都使用 Angular 组件呈现,这些组件具有 templateUrl。模板只是与组件存储在同一文件夹中的 html 文件

标签: mysql angularjs node.js express authorization


【解决方案1】:

在后端,您可以有一个表将每个 userId 映射到一个角色。如果您确定只有两个角色,甚至可以使用布尔列,例如 isAdmin

所以你的用户表看起来像

UserId | isAdmin| other properties
1             true        Xyz

此外,在每次 API 调用时,您都应该像进行身份验证一样进行授权。

根据授权,响应会有所不同,这将有助于以不同方式呈现组件。

我也严格要求将整个授权部分放在后端,而不是在前端进行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 2020-09-12
    • 2022-12-10
    • 2018-01-02
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多