1

我正在尝试实现类似于 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
                }
            ],
        };
    }
}

然后,我创建了PermissionCheckerServiceIsGrantedComponent

不知何故,我设法将PermissionCheckerService的实例放入我的IsGrantedComponent但我不明白,为什么选民数组是空的,即使我确实按如下方式提供它们:

    SecurityModule.forRoot({
        voters: [UserPermissionVoter]
    }),

恐怕我在某处误解了文档(正在阅读文档并试图比较来自 3rd 方库的“相似”逻辑)。

4

0 回答 0