@infosys_ltd/openfga-plugin-backstage
Version:
This plugin wraps around the Backstage Permission Framework and uses the OPENFGA client to evaluate policies.
75 lines (67 loc) • 3.13 kB
TypeScript
import * as react from 'react';
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
import { DiscoveryApi, ConfigApi } from '@backstage/core-plugin-api';
import * as _backstage_config from '@backstage/config';
import { PolicyDecision } from '@backstage/plugin-permission-common';
import { PermissionPolicy, PolicyQuery } from '@backstage/plugin-permission-node';
import { BackstageIdentityResponse } from '@backstage/plugin-auth-node';
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
declare const openfgaPlugin: _backstage_core_plugin_api.BackstagePlugin<{
root: _backstage_core_plugin_api.RouteRef<undefined>;
}, {}, {}>;
declare const OpenfgaPage: () => react.JSX.Element;
interface OpenFgaRequest {
tuple_key: {
user: string;
relation: string;
object: string;
};
authorization_model_id: string;
}
interface OpenFgaResponse {
allowed: boolean;
ok?: boolean;
message: string;
}
declare class OpenFgaClient implements OpenFgaApi {
readonly discoveryApi: DiscoveryApi;
private readonly baseUrl;
private readonly storeId;
private readonly authorizationModelId;
private permissionResponse;
static fromConfig(configApi: ConfigApi, discoveryApi: DiscoveryApi): OpenFgaClient;
constructor(opts: {
discoveryApi: DiscoveryApi;
baseUrl: string;
storeId: string;
authorizationModelId: string;
});
getPermissionResponse(): OpenFgaResponse | null;
private fetch;
sendPermissionRequest(entityName: string, action: string, userName: any): Promise<OpenFgaResponse>;
addPolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
revokePolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
}
declare const openFgaApiRef: _backstage_core_plugin_api.ApiRef<OpenFgaApi>;
interface OpenFgaApi {
sendPermissionRequest(entityName: string, action: string, userName: any): Promise<OpenFgaResponse>;
addPolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
revokePolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
}
declare const openFgaApiFactory: {
deps: {
configApi: _backstage_core_plugin_api.ApiRef<_backstage_config.Config>;
discoveryApi: _backstage_core_plugin_api.ApiRef<DiscoveryApi>;
};
factory: ({ configApi, discoveryApi }: {
configApi: ConfigApi;
discoveryApi: DiscoveryApi;
}) => OpenFgaClient;
};
declare class OpenFgaCatalogPolicy implements PermissionPolicy {
private openFgaClient;
constructor(configApi: ConfigApi, discoveryApi: DiscoveryApi);
handle(request: PolicyQuery, user: BackstageIdentityResponse): Promise<PolicyDecision>;
}
declare const permissionModuleCatalogPolicy: _backstage_backend_plugin_api.BackendFeatureCompat;
export { type OpenFgaApi, OpenFgaCatalogPolicy, OpenFgaClient, type OpenFgaRequest, type OpenFgaResponse, OpenfgaPage, openFgaApiFactory, openFgaApiRef, openfgaPlugin, permissionModuleCatalogPolicy };