ent-framework
Version:
A PostgreSQL graph-database-alike library with microsharding and row-level security
39 lines (36 loc) • 1.01 kB
text/typescript
import { PgSchema } from "ent-framework/pg";
import {
ID,
BaseEnt,
AllowIf,
CanReadOutgoingEdge,
OutgoingEdgePointsToVC,
Require,
GLOBAL_SHARD,
} from "ent-framework";
import { cluster } from "./cluster";
import { EntTopic } from "./EntTopic";
const schema = new PgSchema(
"comments",
{
id: { type: ID, autoInsert: "nextval('comments_id_seq')" },
created_at: { type: Date, autoInsert: "now()" },
topic_id: { type: ID },
creator_id: { type: ID },
message: { type: String },
},
[]
);
export class EntComment extends BaseEnt(cluster, schema) {
static override configure() {
return new this.Configuration({
shardAffinity: GLOBAL_SHARD,
privacyInferPrincipal: async (_vc, row) => row.creator_id,
privacyLoad: [
new AllowIf(new CanReadOutgoingEdge("topic_id", EntTopic)),
new AllowIf(new OutgoingEdgePointsToVC("creator_id")),
],
privacyInsert: [new Require(new OutgoingEdgePointsToVC("creator_id"))],
});
}
}