permission-node: added PermissionRuleAccessor

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2025-01-30 09:39:38 +01:00
parent a9621deada
commit b71f634e3b
4 changed files with 63 additions and 13 deletions
@@ -20,7 +20,7 @@ import {
PermissionCondition,
PermissionCriteria,
} from '@backstage/plugin-permission-common';
import { PermissionRule } from '../types';
import { PermissionRule, PermissionRuleAccessor } from '../types';
import {
createGetRule,
isAndCriteria,
@@ -76,13 +76,26 @@ export type ConditionTransformer<TQuery> = (
*
* @public
*/
export const createConditionTransformer = <
export function createConditionTransformer<TQuery>(
permissionRuleAccessor: PermissionRuleAccessor<any, TQuery>,
): ConditionTransformer<TQuery>;
/**
* @public
* @deprecated Use the version of `createConditionTransformer` that accepts a `PermissionRuleAccessor` instead.
*/
export function createConditionTransformer<
TQuery,
TRules extends PermissionRule<any, TQuery, string>[],
>(
permissionRules: [...TRules],
): ConditionTransformer<TQuery> => {
const getRule = createGetRule(permissionRules);
>(permissionRules: [...TRules]): ConditionTransformer<TQuery>;
export function createConditionTransformer<TQuery>(
permissionRules:
| PermissionRule<any, TQuery, string>[]
| PermissionRuleAccessor<any, TQuery>,
): ConditionTransformer<TQuery> {
const getRule =
typeof permissionRules === 'function'
? permissionRules
: createGetRule(permissionRules);
return conditions => mapConditions(conditions, getRule);
};
}
+17
View File
@@ -66,3 +66,20 @@ export type PermissionRule<
*/
toQuery(params: NoInfer<TParams>): PermissionCriteria<TQuery>;
};
/**
* A function that can be used to look up permission rules by name for a particular resource type.
*
* @remarks
*
* Accessed via {@link @backstage/backend-plugin-api#PermissionsRegistryService.getRuleAccessor}.
*
* Will throw an error if a rule with the provided name does not exist.
*
* @public
*/
export type PermissionRuleAccessor<
TResource = unknown,
TQuery = unknown,
TResourceType extends string = string,
> = (name: string) => PermissionRule<TResource, TQuery, TResourceType>;