我正在尝试实现类似于 Symfony 的标记服务的东西。
它将用于什么:我想将“选民”复制到我的前端逻辑中(是的,我知道前端技术不会给我 100% 确定真正的许可,这就是我需要这种逻辑的原因“翻译”后端到前端)。
我想要获得的成功:一个包含配置服务数组的signle服务(通过构造函数、setter或其他方式)。最好也可以使用forChild静态方法在任何子模块中使用此模块,因此该服务将包含来自主模块和子模块的投票者。
到目前为止我所做的:我在我的模块中创建了一个提供程序
export const PERMISSION_VOTERS = new InjectionToken<PermissionCheckerService>('PermissionCheckerService');
@NgModule({...})
export class SecurityModule {
/**
* @param {Array<IPermissionVoter>} config
* @returns {ModuleWithProviders}
*/
static forRoot (config: {voters: Array<Type<IPermissionVoter>>} = {voters: []}): ModuleWithProviders {
return {
ngModule: SecurityModule,
providers: [
<ClassProvider>{
useClass: PermissionCheckerService,
provide: PERMISSION_VOTERS,
useValue: config,
multi: true
}
],
};
}
}
然后,我创建了PermissionCheckerService和IsGrantedComponent
不知何故,我设法将PermissionCheckerService的实例放入我的IsGrantedComponent但我不明白,为什么选民数组是空的,即使我确实按如下方式提供它们:
SecurityModule.forRoot({
voters: [UserPermissionVoter]
}),
恐怕我在某处误解了文档(正在阅读文档并试图比较来自 3rd 方库的“相似”逻辑)。