Skip to content

Commit 254164a

Browse files
committed
Add support for creating / deleting warrants with a policy
1 parent 7d6515d commit 254164a

File tree

11 files changed

+36
-28
lines changed

11 files changed

+36
-28
lines changed

src/modules/Authorization.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Feature from "./Feature";
22
import Permission from "./Permission";
3-
import Check, { AccessCheckRequest, CheckMany, FeatureCheck, PermissionCheck } from "../types/Check";
3+
import Check, { AccessCheckRequest, CheckMany, CheckWarrantRequest, FeatureCheck, PermissionCheck } from "../types/Check";
44
import Warrant, { isSubject, isWarrantObject } from "../types/Warrant";
55
import WarrantClient from "../WarrantClient";
66

@@ -24,7 +24,7 @@ export default class Authorization {
2424
}
2525

2626
public static async checkMany(check: CheckMany): Promise<boolean> {
27-
let warrants: Warrant[] = check.warrants.map((warrant) => {
27+
let warrants: CheckWarrantRequest[] = check.warrants.map((warrant) => {
2828
return {
2929
objectType: isWarrantObject(warrant.object) ? warrant.object.getObjectType() : warrant.object.objectType,
3030
objectId: isWarrantObject(warrant.object) ? warrant.object.getObjectId() : warrant.object.objectId,

src/modules/PricingTier.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import WarrantClient from "../WarrantClient";
55
import { ListFeatureOptions } from "../types/Feature";
66
import { ObjectType } from "../types/ObjectType";
77
import { CreatePricingTierParams, ListPricingTierOptions } from "../types/PricingTier";
8-
import Warrant, { Context, WarrantObject } from "../types/Warrant";
8+
import Warrant, { PolicyContext, WarrantObject } from "../types/Warrant";
99

1010
export default class PricingTier implements WarrantObject {
1111
pricingTierId: string;
@@ -160,7 +160,7 @@ export default class PricingTier implements WarrantObject {
160160
return Feature.removeFeatureFromPricingTier(this.pricingTierId, featureId);
161161
}
162162

163-
public async hasFeature(featureId: string, context: Context = {}): Promise<boolean> {
163+
public async hasFeature(featureId: string, context: PolicyContext = {}): Promise<boolean> {
164164
return Authorization.hasFeature({ featureId: featureId, subject: { objectType: ObjectType.PricingTier, objectId: this.pricingTierId }, context: context });
165165
}
166166

src/modules/Role.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import WarrantClient from "../WarrantClient";
55
import { ObjectType } from "../types/ObjectType";
66
import { ListPermissionOptions } from "../types/Permission";
77
import { CreateRoleParams, ListRoleOptions, UpdateRoleParams } from "../types/Role";
8-
import Warrant, { Context, WarrantObject } from "../types/Warrant";
8+
import Warrant, { PolicyContext, WarrantObject } from "../types/Warrant";
99

1010
export default class Role implements WarrantObject {
1111
roleId: string;
@@ -136,7 +136,7 @@ export default class Role implements WarrantObject {
136136
return Permission.removePermissionFromRole(this.roleId, permissionId);
137137
}
138138

139-
public async hasPermission(permissionId: string, context: Context = {}): Promise<boolean> {
139+
public async hasPermission(permissionId: string, context: PolicyContext = {}): Promise<boolean> {
140140
return Authorization.hasPermission({ permissionId: permissionId, subject: { objectType: ObjectType.Role, objectId: this.roleId }, context: context });
141141
}
142142

src/modules/Tenant.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ObjectType } from "../types/ObjectType";
99
import { ListPricingTierOptions } from "../types/PricingTier";
1010
import { CreateTenantParams, ListTenantOptions, UpdateTenantParams } from "../types/Tenant";
1111
import { ListUserOptions } from "../types/User";
12-
import { Context, WarrantObject } from "../types/Warrant";
12+
import { PolicyContext, WarrantObject } from "../types/Warrant";
1313

1414
export default class Tenant implements WarrantObject {
1515
// Tenant properties
@@ -150,7 +150,7 @@ export default class Tenant implements WarrantObject {
150150
return Feature.removeFeatureFromTenant(this.tenantId, featureId);
151151
}
152152

153-
public async hasFeature(featureId: string, context: Context = {}): Promise<boolean> {
153+
public async hasFeature(featureId: string, context: PolicyContext = {}): Promise<boolean> {
154154
return Authorization.hasFeature({ featureId: featureId, subject: { objectType: ObjectType.Tenant, objectId: this.tenantId }, context: context });
155155
}
156156

src/modules/User.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ListPricingTierOptions } from "../types/PricingTier";
1313
import { ListRoleOptions } from "../types/Role";
1414
import { CreateUserParams, ListUserOptions, UpdateUserParams } from "../types/User";
1515
import { ListTenantOptions } from "../types/Tenant";
16-
import { Context, WarrantObject } from "../types/Warrant";
16+
import { PolicyContext, WarrantObject } from "../types/Warrant";
1717
import WarrantModule from "./WarrantModule";
1818

1919
export default class User implements WarrantObject {
@@ -174,7 +174,7 @@ export default class User implements WarrantObject {
174174
return Permission.removePermissionFromUser(this.userId, permissionId);
175175
}
176176

177-
public async hasPermission(permissionId: string, context: Context = {}): Promise<boolean> {
177+
public async hasPermission(permissionId: string, context: PolicyContext = {}): Promise<boolean> {
178178
return Authorization.hasPermission({ permissionId: permissionId, subject: { objectType: ObjectType.User, objectId: this.userId }, context: context });
179179
}
180180

@@ -202,7 +202,7 @@ export default class User implements WarrantObject {
202202
return Feature.removeFeatureFromUser(this.userId, featureId);
203203
}
204204

205-
public async hasFeature(featureId: string, context: Context = {}): Promise<boolean> {
205+
public async hasFeature(featureId: string, context: PolicyContext = {}): Promise<boolean> {
206206
return Authorization.hasFeature({ featureId: featureId, subject: { objectType: ObjectType.User, objectId: this.userId }, context: context });
207207
}
208208

src/modules/WarrantModule.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default class WarrantModule {
1212
objectId: isWarrantObject(warrant.object) ? warrant.object.getObjectId() : warrant.object.objectId,
1313
relation: warrant.relation,
1414
subject: isSubject(warrant.subject) ? warrant.subject : { objectType: warrant.subject.getObjectType(), objectId: warrant.subject.getObjectId() },
15-
context: warrant.context
15+
policy: warrant.policy
1616
},
1717
});
1818
} catch (e) {
@@ -29,7 +29,7 @@ export default class WarrantModule {
2929
objectId: isWarrantObject(warrant.object) ? warrant.object.getObjectId() : warrant.object.objectId,
3030
relation: warrant.relation,
3131
subject: isSubject(warrant.subject) ? warrant.subject : { objectType: warrant.subject.getObjectType(), objectId: warrant.subject.getObjectId() },
32-
context: warrant.context
32+
policy: warrant.policy
3333
},
3434
});
3535
} catch (e) {

src/types/Check.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Warrant, { Context, Subject, WarrantObject, WarrantObjectLiteral } from "./Warrant";
1+
import Warrant, { PolicyContext, Subject, WarrantObject, WarrantObjectLiteral } from "./Warrant";
22

33
export enum CheckOp {
44
AllOf = "allOf",
@@ -9,7 +9,7 @@ export interface CheckWarrant {
99
object: WarrantObject | WarrantObjectLiteral;
1010
relation: string;
1111
subject: WarrantObject | Subject;
12-
context?: Context;
12+
context?: PolicyContext;
1313
}
1414

1515
export default interface Check extends CheckWarrant {
@@ -25,19 +25,27 @@ export interface CheckMany {
2525
export interface FeatureCheck {
2626
featureId: string;
2727
subject: WarrantObject | Subject;
28-
context?: Context;
28+
context?: PolicyContext;
2929
debug?: boolean;
3030
}
3131

3232
export interface PermissionCheck {
3333
permissionId: string;
3434
subject: WarrantObject | Subject;
35-
context?: Context;
35+
context?: PolicyContext;
3636
debug?: boolean;
3737
}
3838

39+
export interface CheckWarrantRequest {
40+
objectType: string;
41+
objectId: string;
42+
relation: string;
43+
subject: WarrantObject | Subject;
44+
context?: PolicyContext;
45+
}
46+
3947
export interface AccessCheckRequest {
4048
op?: CheckOp;
41-
warrants: Warrant[];
49+
warrants: CheckWarrantRequest[];
4250
debug?: boolean;
4351
}

src/types/Query.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import { Context, isSubject, isWarrantObject, Subject, WarrantObject, WarrantObjectLiteral } from "./Warrant";
1+
import { isSubject, isWarrantObject, PolicyContext, Subject, WarrantObject, WarrantObjectLiteral } from "./Warrant";
22

33
export interface ForClause {
44
object?: WarrantObject | WarrantObjectLiteral;
55
relation?: string;
66
subject?: Subject | WarrantObject;
7-
context?: Context;
7+
context?: PolicyContext;
88
}
99

1010
export interface WhereClause {
1111
object?: WarrantObject | WarrantObjectLiteral;
1212
relation?: string;
1313
subject?: Subject | WarrantObject;
14-
context?: Context;
14+
context?: PolicyContext;
1515
}
1616

1717
export default class Query {

src/types/Session.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Context } from "./Warrant";
1+
import { PolicyContext } from "./Warrant";
22

33
export interface SessionParams {
44
userId: string;
55
ttl?: number;
6-
context?: Context;
6+
context?: PolicyContext;
77
}
88

99
export interface SelfServiceSessionParams extends SessionParams {

src/types/Warrant.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ export interface ListWarrantOptions extends ListOptions {
77
userId?: string;
88
}
99

10-
export interface Context {
11-
[key: string]: string;
10+
export interface PolicyContext {
11+
[key: string]: any;
1212
}
1313

1414
export interface Subject {
@@ -27,7 +27,7 @@ export default interface Warrant {
2727
objectId: string;
2828
relation: string;
2929
subject: Subject;
30-
context?: Context;
30+
policy?: string;
3131
}
3232

3333
export interface WarrantObject {
@@ -48,5 +48,5 @@ export interface WarrantParams {
4848
object: WarrantObject | WarrantObjectLiteral;
4949
relation: string;
5050
subject: WarrantObject | Subject;
51-
context?: Context;
51+
policy?: string;
5252
}

0 commit comments

Comments
 (0)