Browse Source

update: add permission service prop for `mapEntitiesToContributors` function

pull/20988/head
sumeyyeKurtulus 2 years ago
parent
commit
47fa3cb9b8
  1. 13
      npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts
  2. 11
      npm/ng-packs/packages/account/src/lib/resolvers/extensions.resolver.ts
  3. 112
      npm/ng-packs/packages/components/extensible/src/lib/utils/props.util.ts
  4. 2
      npm/ng-packs/packages/components/extensible/src/lib/utils/state.util.ts
  5. 14
      npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts
  6. 12
      npm/ng-packs/packages/identity/src/lib/resolvers/extensions.resolver.ts
  7. 16
      npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts
  8. 11
      npm/ng-packs/packages/tenant-management/src/lib/resolvers/extensions.resolver.ts

13
npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts

@ -1,15 +1,13 @@
import { Injectable, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { tap, map } from 'rxjs/operators';
import { ConfigStateService, IAbpGuard } from '@abp/ng.core';
import {
ExtensionsService,
getObjectExtensionEntitiesFromStore,
mapEntitiesToContributors,
mergeWithDefaultProps,
} from '@abp/ng.components/extensible';
import { ConfigStateService, IAbpGuard, PermissionService } from '@abp/ng.core';
import { Injectable, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { tap, map } from 'rxjs/operators';
import {
ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS,
@ -23,6 +21,7 @@ import { eAccountComponents } from '../enums/components';
@Injectable()
export class AccountExtensionsGuard implements IAbpGuard {
protected readonly configState = inject(ConfigStateService);
protected readonly permmission = inject(PermissionService);
protected readonly extensions = inject(ExtensionsService);
canActivate(): Observable<boolean> {
@ -34,7 +33,7 @@ export class AccountExtensionsGuard implements IAbpGuard {
map(entities => ({
[eAccountComponents.PersonalSettings]: entities.User,
})),
mapEntitiesToContributors(this.configState, 'AbpIdentity'),
mapEntitiesToContributors(this.configState, this.permmission, 'AbpIdentity'),
tap(objectExtensionContributors => {
mergeWithDefaultProps(
this.extensions.editFormProps,

11
npm/ng-packs/packages/account/src/lib/resolvers/extensions.resolver.ts

@ -1,18 +1,19 @@
import { inject } from '@angular/core';
import { ConfigStateService } from '@abp/ng.core';
import { map, tap } from 'rxjs';
import {
ExtensionsService,
getObjectExtensionEntitiesFromStore,
mapEntitiesToContributors,
mergeWithDefaultProps,
} from '@abp/ng.components/extensible';
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { inject } from '@angular/core';
import { ResolveFn } from '@angular/router';
import { map, tap } from 'rxjs';
import { eAccountComponents } from '../enums';
import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, DEFAULT_ACCOUNT_FORM_PROPS } from '../tokens';
import { ResolveFn } from '@angular/router';
export const accountExtensionsResolver: ResolveFn<any> = () => {
const configState = inject(ConfigStateService);
const permission = inject(PermissionService);
const extensions = inject(ExtensionsService);
const config = { optional: true };
@ -23,7 +24,7 @@ export const accountExtensionsResolver: ResolveFn<any> = () => {
map(entities => ({
[eAccountComponents.PersonalSettings]: entities.User,
})),
mapEntitiesToContributors(configState, 'AbpIdentity'),
mapEntitiesToContributors(configState, permission, 'AbpIdentity'),
tap(objectExtensionContributors => {
mergeWithDefaultProps(
extensions.editFormProps,

112
npm/ng-packs/packages/components/extensible/src/lib/utils/props.util.ts

@ -1,3 +1,4 @@
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { Observable, of } from 'rxjs';
import { EXTRA_PROPERTIES_KEY } from '../constants/extra-properties';
import {
@ -24,7 +25,6 @@ import {
} from '../models/props';
import { PolicyGroup } from '../models/internal/object-extensions';
import { ObjectExtensions } from '../models/object-extensions';
import { ConfigStateService, PermissionService } from '@abp/ng.core';
export function createExtraPropertyValueResolver<T>(
name: string,
@ -65,11 +65,8 @@ function isPolicyMet(
export function checkPolicyProperties(
properties: ObjectExtensions.EntityExtensionProperties,
configState: ConfigStateService,
permissionService?: PermissionService,
permissionService: PermissionService,
) {
//TODO this check will be removed after configuring every contribution in the row 🪄
if (!permissionService) return;
const checkPolicy = (policy: PolicyGroup): boolean => {
const { permissions, globalFeatures, features } = policy;
@ -129,108 +126,3 @@ type InferredProps<F> =
: F extends EditFormPropsFactory<infer REF>
? FormProps<REF>
: never;
// export function checkPolicyProperties(
// properties: ObjectExtensions.EntityExtensionProperties,
// configState: ConfigStateService,
// permissionService?: PermissionService,
// ) {
// Object.keys(properties).forEach((name: string) => {
// const property = properties[name];
// if (!property.policy) {
// return;
// }
// let isPolicyConstraintMet = false;
// const { permissions, features, globalFeatures } = property.policy;
// if (!permissionService) {
// return;
// }
// if (!permissions.permissionNames) {
// return;
// }
// const hasPermission = (permission: string): boolean =>
// permissionService.getGrantedPolicy(permission);
// isPolicyConstraintMet = permissions.requiresAll
// ? permissions.permissionNames.every(hasPermission)
// : permissions.permissionNames.some(hasPermission);
// if (!isPolicyConstraintMet) {
// delete properties[name];
// }
// if (!globalFeatures.features) {
// return;
// }
// const hasGlobalFeature = (globalFeature: string): boolean =>
// configState.getGlobalFeatureIsEnabled(globalFeature);
// isPolicyConstraintMet = globalFeatures.requiresAll
// ? globalFeatures.features.every(hasGlobalFeature)
// : globalFeatures.features.some(hasGlobalFeature);
// if (!isPolicyConstraintMet) {
// delete properties[name];
// }
// const hasFeature = (feature: string): boolean => configState.getFeatureIsEnabled(feature);
// isPolicyConstraintMet = features.requiresAll
// ? features.features.every(hasFeature)
// : features.features.some(hasFeature);
// if (!isPolicyConstraintMet) {
// delete properties[name];
// }
// });
// }
// export function checkPolicyProperties(
// properties: ObjectExtensions.EntityExtensionProperties,
// configState: ConfigStateService,
// permissionService?: PermissionService,
// ) {
// if (!permissionService) return;
// const isConstraintMet = (
// items: string[] | undefined,
// requiresAll: boolean | undefined,
// checkFunction: (item: string) => boolean,
// ): boolean =>
// !items ||
// items.length === 0 ||
// (requiresAll ? items.every(checkFunction) : items.some(checkFunction));
// const policyCheckers = [
// {
// getItems: (policy: any) => policy.permissions?.permissionNames,
// check: (permission: string) => permissionService.getGrantedPolicy(permission),
// },
// {
// getItems: (policy: any) => policy.globalFeatures?.features,
// check: (feature: string) => configState.getGlobalFeatureIsEnabled(feature),
// },
// {
// getItems: (policy: any) => policy.features?.features,
// check: (feature: string) => configState.getFeatureIsEnabled(feature),
// },
// ];
// Object.keys(properties).forEach((name: string) => {
// const { policy } = properties[name];
// if (!policy) return;
// const shouldDelete = policyCheckers.some(
// ({ getItems, check }) => !isConstraintMet(getItems(policy), policy.features.requiresAll, check),
// );
// if (shouldDelete) delete properties[name];
// });
// }

2
npm/ng-packs/packages/components/extensible/src/lib/utils/state.util.ts

@ -75,8 +75,8 @@ export function getObjectExtensionEntitiesFromStore(
export function mapEntitiesToContributors<T = any>(
configState: ConfigStateService,
permissionService: PermissionService,
resource: string,
permissionService?: PermissionService,
) {
return pipe(
switchMap((entities: any) =>

14
npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts

@ -1,9 +1,3 @@
import { Injectable, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import { ConfigStateService, IAbpGuard } from '@abp/ng.core';
import {
ExtensionsService,
getObjectExtensionEntitiesFromStore,
@ -11,6 +5,11 @@ import {
mergeWithDefaultActions,
mergeWithDefaultProps,
} from '@abp/ng.components/extensible';
import { ConfigStateService, IAbpGuard, PermissionService } from '@abp/ng.core';
import { Injectable, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import { eIdentityComponents } from '../enums/components';
import {
@ -32,6 +31,7 @@ import {
@Injectable()
export class IdentityExtensionsGuard implements IAbpGuard {
protected readonly configState = inject(ConfigStateService);
protected readonly permission = inject(PermissionService);
protected readonly extensions = inject(ExtensionsService);
canActivate(): Observable<boolean> {
@ -48,7 +48,7 @@ export class IdentityExtensionsGuard implements IAbpGuard {
[eIdentityComponents.Roles]: entities.Role,
[eIdentityComponents.Users]: entities.User,
})),
mapEntitiesToContributors(this.configState, 'AbpIdentity'),
mapEntitiesToContributors(this.configState, this.permission, 'AbpIdentity'),
tap(objectExtensionContributors => {
mergeWithDefaultActions(
this.extensions.entityActions,

12
npm/ng-packs/packages/identity/src/lib/resolvers/extensions.resolver.ts

@ -1,6 +1,3 @@
import { inject } from '@angular/core';
import { map, tap } from 'rxjs';
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import {
ExtensionsService,
getObjectExtensionEntitiesFromStore,
@ -8,6 +5,10 @@ import {
mergeWithDefaultActions,
mergeWithDefaultProps,
} from '@abp/ng.components/extensible';
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { inject } from '@angular/core';
import { ResolveFn } from '@angular/router';
import { map, tap } from 'rxjs';
import { eIdentityComponents } from '../enums';
import {
IDENTITY_ENTITY_ACTION_CONTRIBUTORS,
@ -21,11 +22,10 @@ import {
DEFAULT_IDENTITY_CREATE_FORM_PROPS,
DEFAULT_IDENTITY_EDIT_FORM_PROPS,
} from '../tokens';
import { ResolveFn } from '@angular/router';
export const identityExtensionsResolver: ResolveFn<any> = () => {
const configState = inject(ConfigStateService);
const permissionService = inject(PermissionService);
const permission = inject(PermissionService);
const extensions = inject(ExtensionsService);
const config = { optional: true };
@ -41,7 +41,7 @@ export const identityExtensionsResolver: ResolveFn<any> = () => {
[eIdentityComponents.Roles]: entities.Role,
[eIdentityComponents.Users]: entities.User,
})),
mapEntitiesToContributors(configState, 'AbpIdentity', permissionService),
mapEntitiesToContributors(configState, permission, 'AbpIdentity'),
tap(objectExtensionContributors => {
mergeWithDefaultActions(
extensions.entityActions,

16
npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts

@ -1,9 +1,3 @@
import { Injectable, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import { ConfigStateService, IAbpGuard } from '@abp/ng.core';
import {
ExtensionsService,
getObjectExtensionEntitiesFromStore,
@ -11,6 +5,11 @@ import {
mergeWithDefaultActions,
mergeWithDefaultProps,
} from '@abp/ng.components/extensible';
import { ConfigStateService, IAbpGuard, PermissionService } from '@abp/ng.core';
import { Injectable, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import { eTenantManagementComponents } from '../enums/components';
import {
@ -32,6 +31,7 @@ import {
@Injectable()
export class TenantManagementExtensionsGuard implements IAbpGuard {
protected readonly configState = inject(ConfigStateService);
protected readonly permission = inject(PermissionService);
protected readonly extensions = inject(ExtensionsService);
canActivate(): Observable<boolean> {
@ -49,7 +49,7 @@ export class TenantManagementExtensionsGuard implements IAbpGuard {
map(entities => ({
[eTenantManagementComponents.Tenants]: entities.Tenant,
})),
mapEntitiesToContributors(this.configState, 'TenantManagement'),
mapEntitiesToContributors(this.configState, this.permission, 'TenantManagement'),
tap(objectExtensionContributors => {
mergeWithDefaultActions(
this.extensions.entityActions,
@ -84,5 +84,3 @@ export class TenantManagementExtensionsGuard implements IAbpGuard {
);
}
}

11
npm/ng-packs/packages/tenant-management/src/lib/resolvers/extensions.resolver.ts

@ -1,6 +1,3 @@
import { inject } from '@angular/core';
import { map, tap } from 'rxjs';
import { ConfigStateService } from '@abp/ng.core';
import {
ExtensionsService,
getObjectExtensionEntitiesFromStore,
@ -8,6 +5,10 @@ import {
mergeWithDefaultActions,
mergeWithDefaultProps,
} from '@abp/ng.components/extensible';
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { inject } from '@angular/core';
import { ResolveFn } from '@angular/router';
import { map, tap } from 'rxjs';
import { eTenantManagementComponents } from '../enums';
import {
TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS,
@ -21,10 +22,10 @@ import {
DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS,
DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS,
} from '../tokens';
import { ResolveFn } from '@angular/router';
export const tenantManagementExtensionsResolver: ResolveFn<any> = () => {
const configState = inject(ConfigStateService);
const permission = inject(PermissionService);
const extensions = inject(ExtensionsService);
const config = { optional: true };
@ -40,7 +41,7 @@ export const tenantManagementExtensionsResolver: ResolveFn<any> = () => {
map(entities => ({
[eTenantManagementComponents.Tenants]: entities.Tenant,
})),
mapEntitiesToContributors(configState, 'TenantManagement'),
mapEntitiesToContributors(configState, permission, 'TenantManagement'),
tap(objectExtensionContributors => {
mergeWithDefaultActions(
extensions.entityActions,

Loading…
Cancel
Save