Skip to content

Commit 57899d1

Browse files
committed
Skip generating access policies for Actor
1 parent 634db07 commit 57899d1

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

src/common/resource.dto.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ export type ResourceRelationsShape = ResourceShape<any>['Relations'];
8585
export class EnhancedResource<T extends ResourceShape<any>> {
8686
/** @internal */
8787
static readonly dbTypes = new WeakMap<ResourceShape<any>, $.$expr_PathNode>();
88+
/** @internal */
89+
static readonly dbSkipAccessPolicies = new Set<string>();
8890

8991
private constructor(readonly type: T) {}
9092
private static readonly refs = new WeakMap<
@@ -255,6 +257,10 @@ export class EnhancedResource<T extends ResourceShape<any>> {
255257
return type as any;
256258
}
257259

260+
get generateAccessPolicies() {
261+
return this.hasDB && !EnhancedResource.dbSkipAccessPolicies.has(this.dbFQN);
262+
}
263+
258264
get dbFQN(): ResourceShape<any> extends T ? string : DBName<DBType<T>> {
259265
return this.db.__element__.__name__ as any;
260266
}

src/components/authorization/policy/edgedb-access-policy.generator.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ export class EdgeDBAccessPolicyGenerator {
1717

1818
makeSdl(params: AsEdgeQLParams<any>) {
1919
const { resource } = params;
20+
21+
if (!resource.generateAccessPolicies) {
22+
return undefined;
23+
}
24+
2025
const actions = {
2126
select: 'read',
2227
'update read': 'read',

src/components/user/dto/actor.dto.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import {
1313
import { RegisterResource } from '~/core';
1414
import { e } from '~/core/edgedb';
1515

16-
@RegisterResource({ db: e.Actor })
16+
@RegisterResource({
17+
db: e.Actor,
18+
skipAccessPolicies: true,
19+
})
1720
@InterfaceType({
1821
resolveType: resolveByTypename(Actor.name),
1922
})

src/core/resources/resource.decorator.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,21 @@ import { __privateDontUseThis } from './resource-map-holder';
77
* Be sure to add the type to the type map as well.
88
* See {@link import('./map').ResourceMap} for details on that.
99
*/
10-
export const RegisterResource = ({ db }: { db?: $.$expr_PathNode } = {}) => {
10+
export const RegisterResource = ({
11+
db,
12+
skipAccessPolicies,
13+
}: {
14+
db?: $.$expr_PathNode;
15+
skipAccessPolicies?: boolean;
16+
} = {}) => {
1117
return <T extends ResourceShape<any>>(target: T) => {
1218
__privateDontUseThis[target.name] = target;
13-
db && EnhancedResource.dbTypes.set(target, db);
19+
if (db) {
20+
EnhancedResource.dbTypes.set(target, db);
21+
if (skipAccessPolicies) {
22+
EnhancedResource.dbSkipAccessPolicies.add(db.__element__.__name__);
23+
}
24+
}
1425
return target;
1526
};
1627
};

0 commit comments

Comments
 (0)