permission-node: refactor PermissionRuleAccessor to PermissionRuleset

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2025-01-30 15:38:22 +01:00
parent 0c34438106
commit 7500c99ecc
13 changed files with 48 additions and 41 deletions
@@ -20,7 +20,7 @@ import {
PermissionCondition,
PermissionCriteria,
} from '@backstage/plugin-permission-common';
import { PermissionRule, PermissionRuleAccessor } from '../types';
import { PermissionRule, PermissionRuleset } from '../types';
import {
createGetRule,
isAndCriteria,
@@ -77,11 +77,11 @@ export type ConditionTransformer<TQuery> = (
* @public
*/
export function createConditionTransformer<TQuery>(
permissionRuleAccessor: PermissionRuleAccessor<any, TQuery>,
permissionRuleset: PermissionRuleset<any, TQuery>,
): ConditionTransformer<TQuery>;
/**
* @public
* @deprecated Use the version of `createConditionTransformer` that accepts a `PermissionRuleAccessor` instead.
* @deprecated Use the version of `createConditionTransformer` that accepts a `PermissionRuleset` instead.
*/
export function createConditionTransformer<
TQuery,
@@ -90,11 +90,11 @@ export function createConditionTransformer<
export function createConditionTransformer<TQuery>(
permissionRules:
| PermissionRule<any, TQuery, string>[]
| PermissionRuleAccessor<any, TQuery>,
| PermissionRuleset<any, TQuery>,
): ConditionTransformer<TQuery> {
const getRule =
typeof permissionRules === 'function'
? permissionRules
'getRuleByName' in permissionRules
? (n: string) => permissionRules.getRuleByName(n)
: createGetRule(permissionRules);
return conditions => mapConditions(conditions, getRule);
@@ -30,7 +30,7 @@ import {
PermissionCriteria,
PolicyDecision,
} from '@backstage/plugin-permission-common';
import { PermissionRule, PermissionRuleAccessor } from '../types';
import { PermissionRule, PermissionRuleset } from '../types';
import {
NoInfer,
createGetRule,
@@ -165,11 +165,11 @@ const applyConditions = <TResourceType extends string, TResource>(
* @public
*/
export function createConditionAuthorizer<TResource>(
permissionRuleAccessor: PermissionRuleAccessor<TResource>,
permissionRuleset: PermissionRuleset<TResource>,
): (decision: PolicyDecision, resource: TResource | undefined) => boolean;
/**
* @public
* @deprecated Use the version of `createConditionAuthorizer` that accepts a `PermissionRuleAccessor` instead.
* @deprecated Use the version of `createConditionAuthorizer` that accepts a `PermissionRuleset` instead.
*/
export function createConditionAuthorizer<TResource, TQuery>(
rules: PermissionRule<TResource, TQuery, string>[],
@@ -177,9 +177,12 @@ export function createConditionAuthorizer<TResource, TQuery>(
export function createConditionAuthorizer<TResource, TQuery>(
rules:
| PermissionRule<TResource, TQuery, string>[]
| PermissionRuleAccessor<TResource>,
| PermissionRuleset<TResource>,
): (decision: PolicyDecision, resource: TResource | undefined) => boolean {
const getRule = typeof rules === 'function' ? rules : createGetRule(rules);
const getRule =
'getRuleByName' in rules
? (n: string) => rules.getRuleByName(n)
: createGetRule(rules);
return (
decision: PolicyDecision,
@@ -439,9 +442,9 @@ export function createPermissionIntegrationRouter<
TResource
>,
): void;
getRuleAccessor<TResource, TQuery, TResourceType extends string>(
getPermissionRuleset<TResource, TQuery, TResourceType extends string>(
resourceRef: PermissionResourceRef<TResource, TQuery, TResourceType>,
): PermissionRuleAccessor<TResource, TQuery, TResourceType>;
): PermissionRuleset<TResource, TQuery, TResourceType>;
} {
const store = new PermissionIntegrationMetadataStore();
@@ -531,12 +534,12 @@ export function createPermissionIntegrationRouter<
) {
store.addResourceType(resource);
},
getRuleAccessor<TResource, TQuery, TResourceType extends string>(
getPermissionRuleset<TResource, TQuery, TResourceType extends string>(
resourceRef: PermissionResourceRef<TResource, TQuery, TResourceType>,
): PermissionRuleAccessor<TResource, TQuery, TResourceType> {
return store.getRuleMapper(
resourceRef.resourceType,
) as PermissionRuleAccessor<TResource, TQuery, TResourceType>;
): PermissionRuleset<TResource, TQuery, TResourceType> {
return {
getRuleByName: store.getRuleMapper(resourceRef.resourceType),
} as PermissionRuleset<TResource, TQuery, TResourceType>;
},
});
}
+5 -3
View File
@@ -72,14 +72,16 @@ export type PermissionRule<
*
* @remarks
*
* Accessed via {@link @backstage/backend-plugin-api#PermissionsRegistryService.getRuleAccessor}.
* Accessed via {@link @backstage/backend-plugin-api#PermissionsRegistryService.getPermissionRuleset}.
*
* Will throw an error if a rule with the provided name does not exist.
*
* @public
*/
export type PermissionRuleAccessor<
export type PermissionRuleset<
TResource = unknown,
TQuery = unknown,
TResourceType extends string = string,
> = (name: string) => PermissionRule<TResource, TQuery, TResourceType>;
> = {
getRuleByName(name: string): PermissionRule<TResource, TQuery, TResourceType>;
};