require any #181

This commit is contained in:
2025-09-28 14:53:57 +02:00
parent 6f46b94998
commit 3286a95cbf
19 changed files with 165 additions and 135 deletions

View File

@@ -18,6 +18,7 @@ from model.author_dao import AuthorDao
from model.author_query import AuthorGraphType, AuthorFilter, AuthorSort
from model.post_dao import PostDao
from model.post_query import PostFilter, PostSort, PostGraphType
from permissions import PostPermissions
from queries.hello import HelloQuery
from scoped_service import ScopedService
from service import PingService
@@ -85,11 +86,16 @@ def main():
schema.query.string_field("ping", resolver=lambda: "pong")
schema.query.with_query("hello", HelloQuery)
schema.query.dao_collection_field(AuthorGraphType, AuthorDao, "authors", AuthorFilter, AuthorSort)
schema.query.dao_collection_field(PostGraphType, PostDao, "posts", PostFilter, PostSort).with_public(True)
(
schema.query.dao_collection_field(PostGraphType, PostDao, "posts", PostFilter, PostSort)
.with_require_any_permission(PostPermissions.read)
)
app.with_playground()
app.with_graphiql()
app.with_permissions(PostPermissions)
provider = builder.service_provider
user_cache = provider.get_service(Cache[AuthUser])
role_cache = provider.get_service(Cache[Role])

View File

@@ -1,3 +1,4 @@
from cpl.graphql.query_context import QueryContext
from cpl.graphql.schema.filter.filter import Filter
from cpl.graphql.schema.graph_type import GraphType
from cpl.graphql.schema.sort.sort import Sort
@@ -34,11 +35,12 @@ class PostGraphType(GraphType[Post]):
async def _a(root: Post):
return await authors.get_by_id(root.author_id)
self.object_field(
"author",
AuthorGraphType,
resolver=_a#lambda root: root.author_id,
).with_public(True)
def r_name(ctx: QueryContext):
return ctx.user.username == "admin"
self.object_field("author", AuthorGraphType, resolver=_a).with_require_any(
[], [r_name]
)
self.string_field(
"title",
resolver=lambda root: root.title,

View File

@@ -0,0 +1,8 @@
from enum import Enum
class PostPermissions(Enum):
read = "post.read"
write = "post.write"
delete = "post.delete"