【问题标题】:How to secure routes in [Angular 10] Secure Routes Using AuthGuard Based On User Role如何在 [Angular 10] 中使用基于用户角色的 AuthGuard 保护路由安全
【发布时间】:2021-09-05 11:28:33
【问题描述】:

我一直在查看有关 [Angular 10] Secure Routes Using AuthGuard Based On User Role 的博客,但没有可以查看的示例演示或完整过程,谁能帮助我了解 [Angular 10] Secure 的实施使用基于用户角色的 AuthGuard 的路由与此博客相同或相似?这样我就可以把事情联系起来。谢谢。

我只是想在 angular 或 angular 10 中使用基于用户角色的 AuthGuard 完全实现安全路由。

我在后端有一个服务,或者我已经有包含用户角色的路由,端点包含的角色是下面的示例 json。

如何将角色从 API 集成到警卫服务和路由?任何人都可以请赐教。谢谢。

示例数据:

{
  "id": 2,
  "emailAddress": "test@gmail.com",
  "firstName": "Test",
  "lastName": "Test Man",
  "mobileNumber": "455555555",
  "associatedAccount": "Sample",
  "status": "Active",
  "lastLogIn": null,
  "invitedById": null,
  "invitedByDate": null,
  "identityId": "2",
  "userAccountDto": [
      {
          "id": 2,
          "accountId": 4,
          "accountName": "Sample Company 1",
          "displayName": "Sample Company",
          "settings": "{\"propertySearchFilter\":[{\"type\":\"Region\",\"values\":null},{\"type\":\"State\",\"values\":[]},{\"type\":\"Repm\",\"values\":null}]}",
          "userRoleDto": {
              "id": 2,
              "roleName": "Admin"
          },
          "accountDto": {
              "accountId": 4,
              "accountName": "Sample Company",
              "displayName": "Sample Company",
              "isActive": true,
              "contactFirstName": null,
              "contactLastName": null,
              "contactPhone": null,
              "contactEmailAddress": null,
              "accountRoleDto": [
                  {
                      "id": 1,
                      "accountId": 4,
                      "roleName": "Admin"
                  },
                  {
                      "id": 5,
                      "accountId": 4,
                      "roleName": "Transaction Manager"
                  },
              ]
          }
      },
     

https://www.geekstrick.com/angular-10-secure-routes-using-authguard-based-on-user-role/

【问题讨论】:

    标签: javascript angular authentication roles


    【解决方案1】:

    Demo Guarding 用于保护路由。要首先使用警卫,您需要编写您的指南服务,如下所示。在下面的代码中认为您从 UserRolesService 获得角色 你会看到 canActivate 函数。该函数用于允许或不允许。在函数内部,你可以检查你的角色,如果你想允许那个角色返回 true,如果不返回 false

    import { Injectable } from '@angular/core';
    import { UserRolesService} from './user-roles.service';
    import { Router, ActivatedRouteSnapshot } from '@angular/router';
    @Injectable({
      providedIn: 'root'
    })
    export class RoleGuardService {
    
      constructor(private getUserRoles: UserRolesService) { }
    
      canActivate(route: ActivatedRouteSnapshot): boolean {
        return route.data.roles.some( ai => this.getUserRoles.getRoles().includes(ai) );
      }
    
    }
    

    在你写完你的守卫之后,你需要使用 canActivate 属性来激活这条路线的守卫。

        path: "admin",
            component: AdminOnlyComponent,
            canActivate: [RoleGuardService],
            data: { roles: ['admin']
    }
    

    【讨论】:

    • 嗨@pc_coder,先生,我已经更新了我上面的问题,我想知道如何使用基于用户角色的 AuthGuard 将 API 中的用户角色应用到 Angular 10 安全路由。谢谢。
    • 您是否有角色来自 API 的示例,例如我发送的上述格式。谢谢。
    • 带有 api 无法显示。但是有几个逻辑可以做到这一点。通过登录,您还可以获得角色并存储在会话中。或者登录后你得到用户名或用户ID,使用这个参数你也可以向api发送请求来获取角色列表。在 UserRolesService 你可以做到你可以在那里获取数据
    • 在我获得 UserRolesService Sir 上的角色后,接下来会是什么?您能否提供一个示例,先生仅使用带有角色的修复 json 对象?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2021-09-20
    • 2014-07-18
    • 2015-01-30
    • 2017-05-10
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多