|
|
|
@ -22,6 +22,9 @@ import { |
|
|
|
PropList, |
|
|
|
PropsFactory, |
|
|
|
} 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, |
|
|
|
@ -47,6 +50,59 @@ export function mergeWithDefaultProps<F extends PropsFactory<any>>( |
|
|
|
); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function isPolicyMet( |
|
|
|
checkFunction: (item: string) => boolean, |
|
|
|
requiresAll: boolean, |
|
|
|
items?: string[], |
|
|
|
): boolean { |
|
|
|
if (!items?.length) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
return requiresAll ? items.every(checkFunction) : items.some(checkFunction); |
|
|
|
} |
|
|
|
|
|
|
|
export function checkPolicyProperties( |
|
|
|
properties: ObjectExtensions.EntityExtensionProperties, |
|
|
|
configState: ConfigStateService, |
|
|
|
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; |
|
|
|
|
|
|
|
const checks = [ |
|
|
|
{ |
|
|
|
items: permissions?.permissionNames, |
|
|
|
requiresAll: permissions?.requiresAll, |
|
|
|
check: (item: string) => permissionService.getGrantedPolicy(item), |
|
|
|
}, |
|
|
|
{ |
|
|
|
items: globalFeatures?.features, |
|
|
|
requiresAll: globalFeatures?.requiresAll, |
|
|
|
check: (item: string) => configState.getGlobalFeatureIsEnabled(item), |
|
|
|
}, |
|
|
|
{ |
|
|
|
items: features?.features, |
|
|
|
requiresAll: features?.requiresAll, |
|
|
|
check: (item: string) => configState.getFeatureIsEnabled(item), |
|
|
|
}, |
|
|
|
]; |
|
|
|
|
|
|
|
return checks.every(({ items, requiresAll, check }) => |
|
|
|
isPolicyMet(check, requiresAll ?? false, items), |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|
Object.entries(properties).forEach(([name, property]) => { |
|
|
|
if (property.policy && !checkPolicy(property.policy)) { |
|
|
|
delete properties[name]; |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
type InferredPropDefaults<F> = |
|
|
|
F extends EntityPropsFactory<infer RE> |
|
|
|
? EntityPropDefaults<RE> |
|
|
|
@ -73,3 +129,108 @@ 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];
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|