项目

权限管理

权限是一种简单的策略,可针对特定用户、角色或客户端授予或禁止。您可以在ABP授权文档中了解更多信息。

您可以使用PermissionServicegetGrantedPolicygetGrantedPolicy$方法获取已认证用户的权限。

您可以获取布尔值的权限:

import { PermissionService } from '@abp/ng.core';
import { inject } from '@angular/core';

export class YourComponent {
  private permissionService = inject(PermissionService);

  ngOnInit(): void {
    const canCreate = this.permissionService.getGrantedPolicy('AbpIdentity.Roles.Create');
  }
}

您还可以组合策略键来精细调整选择:

// this.permissionService 是 PermissionService 的实例

const hasIdentityAndAccountPermission = this.permissionService.getGrantedPolicy(
  "Abp.Identity && Abp.Account"
);

const hasIdentityOrAccountPermission = this.permissionService.getGrantedPolicy(
  "Abp.Identity || Abp.Account"
);

创建权限选择器时请考虑以下规则

  • 最多可以组合2个键
  • &&操作符需要同时满足两个键
  • ||操作符只需要满足任意一个键
  • 空字符串''作为键将返回true
  • 使用操作符但没有第二个键将返回false

权限指令

您可以使用PermissionDirective根据用户权限管理DOM元素的可见性。

<div *abpPermission="'AbpIdentity.Roles'">
  仅当用户拥有'AbpIdentity.Roles'权限时,此内容才可见。
</div>

如上所示,您可以使用abpPermission结构指令从DOM中移除元素。

权限守卫

如果您想在导航过程中控制已认证用户访问路由的权限,可以使用permissionGuard

  • 从@abp/ng.core导入permissionGuard
  • 在路由对象中添加canActivate: [permissionGuard]
  • 在路由模块的路由data属性中添加requiredPolicy
import { permissionGuard } from '@abp/ng.core';
// ...
const routes: Routes = [
  {
    path: 'path',
    component: YourComponent,
    canActivate: [permissionGuard],
    data: {
        requiredPolicy: 'YourProjectName.YourComponent', // 组件的策略键
    },
  },
];

自定义

在某些情况下,可能需要自定义权限管理。您只需要用自定义服务替换原有服务即可。具体实现方法如下:

  • 首先,创建您自己的服务。我们将其命名为CustomPermissionService,并从@abp/ng.core扩展PermissionService
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { Injectable, inject } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class CustomPermissionService extends PermissionService {
  constructor() {
    super(inject(ConfigStateService));
  }

  // 这是一个展示如何重写方法的示例
  getGrantedPolicy$(key: string) {
    return super.getGrantedPolicy$(key);
  }
}
  • 然后,在app.config.ts中按如下方式提供此服务:
export const appConfig: ApplicationConfig = {
  providers: [
    // ...
    {
      provide: PermissionService,
      useExisting: CustomPermissionService,
    },
  ],
};

这样就完成了。现在,当指令/守卫向Angular请求PermissionService时,它将注入您的服务。

在本文档中