remove uuid from policies
This commit is contained in:
parent
c1c6a78b85
commit
5af41ffdda
|
@ -3,7 +3,7 @@ package AD.DELETE
|
|||
default allow := false
|
||||
|
||||
allow {
|
||||
input.userUuid == input.owner
|
||||
input.owner == input.requester
|
||||
}
|
||||
|
||||
allow {
|
||||
|
|
|
@ -3,7 +3,7 @@ package AD.UPDATE
|
|||
default allow := false
|
||||
|
||||
allow {
|
||||
input.userUuid == input.owner
|
||||
input.owner == input.requester
|
||||
}
|
||||
|
||||
allow {
|
||||
|
|
|
@ -18,17 +18,17 @@ import { AuthorizationPresenter } from './authorization.presenter';
|
|||
@Controller()
|
||||
export class AuthorizationController {
|
||||
constructor(
|
||||
private readonly _queryBus: QueryBus,
|
||||
@InjectMapper() private readonly _mapper: Mapper,
|
||||
private readonly queryBus: QueryBus,
|
||||
@InjectMapper() private readonly mapper: Mapper,
|
||||
) {}
|
||||
|
||||
@GrpcMethod('AuthorizationService', 'Decide')
|
||||
async decide(data: DecisionRequest): Promise<AuthorizationPresenter> {
|
||||
try {
|
||||
const authorization: Authorization = await this._queryBus.execute(
|
||||
new DecisionQuery(data.uuid, data.domain, data.action, data.context),
|
||||
const authorization: Authorization = await this.queryBus.execute(
|
||||
new DecisionQuery(data.domain, data.action, data.context),
|
||||
);
|
||||
return this._mapper.map(
|
||||
return this.mapper.map(
|
||||
authorization,
|
||||
Authorization,
|
||||
AuthorizationPresenter,
|
||||
|
|
|
@ -7,10 +7,9 @@ service AuthorizationService {
|
|||
}
|
||||
|
||||
message AuthorizationRequest {
|
||||
string uuid = 1;
|
||||
string domain = 2;
|
||||
string action = 3;
|
||||
repeated Item context = 4;
|
||||
string domain = 1;
|
||||
string action = 2;
|
||||
repeated Item context = 3;
|
||||
}
|
||||
|
||||
message Item {
|
||||
|
|
|
@ -18,12 +18,11 @@ export class OpaDecisionMaker extends IMakeDecision {
|
|||
super();
|
||||
}
|
||||
|
||||
async decide(
|
||||
uuid: string,
|
||||
decide = async (
|
||||
domain: Domain,
|
||||
action: Action,
|
||||
context: Array<ContextItem>,
|
||||
): Promise<Authorization> {
|
||||
): Promise<Authorization> => {
|
||||
const reducedContext = context.reduce(
|
||||
(obj, item) => Object.assign(obj, { [item.name]: item.value }),
|
||||
{},
|
||||
|
@ -34,7 +33,6 @@ export class OpaDecisionMaker extends IMakeDecision {
|
|||
this._configService.get<string>('OPA_URL') + domain + '/' + action,
|
||||
{
|
||||
input: {
|
||||
uuid,
|
||||
...reducedContext,
|
||||
},
|
||||
},
|
||||
|
@ -44,5 +42,5 @@ export class OpaDecisionMaker extends IMakeDecision {
|
|||
} catch (e) {
|
||||
return new Authorization(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,13 +1,9 @@
|
|||
import { IsArray, IsEnum, IsNotEmpty, IsString } from 'class-validator';
|
||||
import { IsArray, IsEnum, IsNotEmpty } from 'class-validator';
|
||||
import { ContextItem } from './context-item';
|
||||
import { Action } from './action.enum';
|
||||
import { Domain } from './domain.enum';
|
||||
|
||||
export class DecisionRequest {
|
||||
@IsString()
|
||||
@IsNotEmpty()
|
||||
uuid: string;
|
||||
|
||||
@IsEnum(Domain)
|
||||
@IsNotEmpty()
|
||||
domain: Domain;
|
||||
|
|
|
@ -6,7 +6,6 @@ import { Authorization } from '../entities/authorization';
|
|||
@Injectable()
|
||||
export abstract class IMakeDecision {
|
||||
abstract decide(
|
||||
uuid: string,
|
||||
domain: Domain,
|
||||
action: Action,
|
||||
context: Array<{ name: string; value: string }>,
|
||||
|
|
|
@ -9,7 +9,6 @@ export class DecisionUseCase {
|
|||
|
||||
async execute(decisionQuery: DecisionQuery): Promise<Authorization> {
|
||||
return this._decisionMaker.decide(
|
||||
decisionQuery.uuid,
|
||||
decisionQuery.domain,
|
||||
decisionQuery.action,
|
||||
decisionQuery.context,
|
||||
|
|
|
@ -3,18 +3,11 @@ import { Action } from '../domain/dtos/action.enum';
|
|||
import { Domain } from '../domain/dtos/domain.enum';
|
||||
|
||||
export class DecisionQuery {
|
||||
readonly uuid: string;
|
||||
readonly domain: Domain;
|
||||
readonly action: Action;
|
||||
readonly context: Array<ContextItem>;
|
||||
|
||||
constructor(
|
||||
uuid: string,
|
||||
domain: Domain,
|
||||
action: Action,
|
||||
context?: Array<ContextItem>,
|
||||
) {
|
||||
this.uuid = uuid;
|
||||
constructor(domain: Domain, action: Action, context?: Array<ContextItem>) {
|
||||
this.domain = domain;
|
||||
this.action = action;
|
||||
this.context = context;
|
||||
|
|
|
@ -40,14 +40,12 @@ describe('DecisionUseCase', () => {
|
|||
describe('execute', () => {
|
||||
it('should validate an authorization', async () => {
|
||||
const decisionRequest: DecisionRequest = new DecisionRequest();
|
||||
decisionRequest.uuid = 'bb281075-1b98-4456-89d6-c643d3044a91';
|
||||
decisionRequest.domain = Domain.USER;
|
||||
decisionRequest.action = Action.CREATE;
|
||||
decisionRequest.context = [new ContextItem('context1', 'value1')];
|
||||
expect(
|
||||
decisionUseCase.execute(
|
||||
new DecisionQuery(
|
||||
decisionRequest.uuid,
|
||||
decisionRequest.domain,
|
||||
decisionRequest.action,
|
||||
decisionRequest.context,
|
||||
|
|
|
@ -71,28 +71,25 @@ describe('OpaDecisionMaker', () => {
|
|||
describe('execute', () => {
|
||||
it('should return a truthy authorization', async () => {
|
||||
const authorization = await opaDecisionMaker.decide(
|
||||
'bb281075-1b98-4456-89d6-c643d3044a91',
|
||||
Domain.USER,
|
||||
Action.READ,
|
||||
[],
|
||||
[{ name: 'uuid', value: 'bb281075-1b98-4456-89d6-c643d3044a91' }],
|
||||
);
|
||||
expect(authorization.allow).toBeTruthy();
|
||||
});
|
||||
it('should return a falsy authorization', async () => {
|
||||
const authorization = await opaDecisionMaker.decide(
|
||||
'bb281075-1b98-4456-89d6-c643d3044a91',
|
||||
Domain.USER,
|
||||
Action.READ,
|
||||
[],
|
||||
[{ name: 'uuid', value: 'bb281075-1b98-4456-89d6-c643d3044a91' }],
|
||||
);
|
||||
expect(authorization.allow).toBeFalsy();
|
||||
});
|
||||
it('should return a falsy authorization when an error happens', async () => {
|
||||
const authorization = await opaDecisionMaker.decide(
|
||||
'bb281075-1b98-4456-89d6-c643d3044a91',
|
||||
Domain.USER,
|
||||
Action.READ,
|
||||
[],
|
||||
[{ name: 'uuid', value: 'bb281075-1b98-4456-89d6-c643d3044a91' }],
|
||||
);
|
||||
expect(authorization.allow).toBeFalsy();
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue