@schoolai/spicedb-zed-schema-parser
Version:
SpiceDB .zed file format parser and analyzer written in Typescript
138 lines (119 loc) • 3.23 kB
text/typescript
import { BoundCheckOperation, CheckOperation } from './check'
import { BoundDeleteOperation, DeleteOperation } from './delete'
import { BoundLookupOperation, LookupOperation } from './lookup'
import { BoundQueryOperation, QueryOperation } from './query'
import { BoundTransaction, Transaction } from './transaction'
import { Operation, SpiceDBClient } from './types'
import { BoundWriteOperation, WriteOperation } from './write'
/**
* Static builders for creating pure operations without a client
*/
// biome-ignore lint/complexity/noStaticOnlyClass: builder class is intended
export class PermissionOperations {
/**
* Create a grant operation
*/
static grant(relation: string): WriteOperation {
return new WriteOperation('grant', relation)
}
/**
* Create a revoke operation
*/
static revoke(relation: string): WriteOperation {
return new WriteOperation('revoke', relation)
}
/**
* Create a check operation
*/
static check(permission: string): CheckOperation {
return new CheckOperation(permission)
}
/**
* Create a find/query operation
*/
static find(): QueryOperation {
return new QueryOperation()
}
/**
* Create a delete operation
*/
static delete(): DeleteOperation {
return new DeleteOperation()
}
/**
* Create a batch transaction
*/
static batch(): Transaction {
return new Transaction()
}
/**
* Create a lookup operation
*/
static lookup(): LookupOperation {
return new LookupOperation()
}
}
/**
* Main entry point for the permissions DSL with bound client
*/
export class Permissions {
constructor(private client: SpiceDBClient) {}
/**
* Grant a relation between subjects and resources
*/
grant(relation: string): BoundWriteOperation {
return new BoundWriteOperation(this.client, 'grant', relation)
}
/**
* Revoke a relation between subjects and resources
*/
revoke(relation: string): BoundWriteOperation {
return new BoundWriteOperation(this.client, 'revoke', relation)
}
/**
* Check if a subject has a permission on a resource
*/
check(permission: string): BoundCheckOperation {
return new BoundCheckOperation(this.client, permission)
}
/**
* Find subjects or resources matching criteria
*/
find(): BoundQueryOperation {
return new BoundQueryOperation(this.client)
}
/**
* Delete relationships matching a filter
*/
delete(): BoundDeleteOperation {
return new BoundDeleteOperation(this.client)
}
/**
* Create a batch transaction
*/
batch(): BoundTransaction {
return new BoundTransaction(this.client)
}
/**
* Lookup resources accessible to a subject
*/
lookup(): BoundLookupOperation {
return new BoundLookupOperation(this.client)
}
/**
* Execute a pure operation with this instance's client
*/
async execute<T>(operation: Operation<T>): Promise<T> {
return operation.execute(this.client)
}
}
/**
* Create a permissions instance with bound client
*/
export function createPermissions(client: SpiceDBClient): Permissions {
return new Permissions(client)
}
/**
* Export the static builders for convenience
*/
export const Operations = PermissionOperations