permission-common: accept configApi in PermissionClient constructor

Moving the responsibility of pulling the right configuration key inside
the PermissionClient keeps it as the responsibility of
permission-common, whereas putting it on the outside means anyone
constructing a PermissionClient has to know which key to use.

Signed-off-by: Mike Lewis <mtlewis@users.noreply.github.com>
This commit is contained in:
Mike Lewis
2021-11-19 09:35:09 +00:00
parent 2d03529828
commit 430b3f7a8f
4 changed files with 13 additions and 5 deletions
+3 -1
View File
@@ -3,6 +3,8 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
import { Config } from '@backstage/config';
// @public
export type AuthorizeRequest = {
permission: Permission;
@@ -67,7 +69,7 @@ export type PermissionAttributes = {
// @public
export class PermissionClient {
constructor(options: { discoveryApi: DiscoveryApi; enabled?: boolean });
constructor(options: { discoveryApi: DiscoveryApi; configApi: Config });
authorize(
requests: AuthorizeRequest[],
options?: AuthorizeRequestOptions,
+1
View File
@@ -38,6 +38,7 @@
"url": "https://github.com/backstage/backstage/issues"
},
"dependencies": {
"@backstage/config": "^0.1.11",
"@backstage/errors": "^0.1.2",
"cross-fetch": "^3.0.6",
"uuid": "^8.0.0",
@@ -16,6 +16,7 @@
import { RestContext, rest } from 'msw';
import { setupServer } from 'msw/node';
import { ConfigReader } from '@backstage/config';
import { PermissionClient } from './PermissionClient';
import { AuthorizeRequest, AuthorizeResult, Identified } from './types/api';
import { DiscoveryApi } from './types/discovery';
@@ -32,7 +33,7 @@ const discoveryApi: DiscoveryApi = {
};
const client: PermissionClient = new PermissionClient({
discoveryApi,
enabled: true,
configApi: new ConfigReader({ permission: { enabled: true } }),
});
const mockPermission: Permission = {
@@ -156,7 +157,10 @@ describe('PermissionClient', () => {
return res(json(responses));
},
);
const disabled = new PermissionClient({ discoveryApi, enabled: false });
const disabled = new PermissionClient({
discoveryApi,
configApi: new ConfigReader({ permission: { enabled: false } }),
});
const response = await disabled.authorize([mockAuthorizeRequest]);
expect(response[0]).toEqual(
expect.objectContaining({ result: AuthorizeResult.ALLOW }),
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import { Config } from '@backstage/config';
import { ResponseError } from '@backstage/errors';
import fetch from 'cross-fetch';
import * as uuid from 'uuid';
@@ -74,9 +75,9 @@ export class PermissionClient {
private readonly enabled: boolean;
private readonly discoveryApi: DiscoveryApi;
constructor(options: { discoveryApi: DiscoveryApi; enabled?: boolean }) {
constructor(options: { discoveryApi: DiscoveryApi; configApi: Config }) {
this.discoveryApi = options.discoveryApi;
this.enabled = options.enabled ?? false;
this.enabled = options.configApi.getBoolean('permission.enabled');
}
/**