我正在努力实现与Symfony标记服务类似的东西。
它将用于什么: 我希望将“选民”复制到我的前线逻辑中(是的,我知道前端技术不会让我100%确定真正的许可,这就是我需要这样的逻辑来“将”后端“转换”为前端的原因。) / p>
我想要获得成功: 一个 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]
}),
我担心我会错误地理解某些文档(正在阅读文档并试图比较来自第三方lib的“类似”逻辑)。