权限管理
权限是一种简单的策略,可针对特定用户、角色或客户端授予或禁止。您可以在ABP授权文档中了解更多信息。
您可以使用PermissionService的getGrantedPolicy或getGrantedPolicy$方法获取已认证用户的权限。
您可以获取布尔值的权限:
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时,它将注入您的服务。
抠丁客


