1
0
Fork 0
mirror of synced 2024-07-15 11:25:53 +12:00

Update permissions and queries for 1.0

This commit is contained in:
Jake Barnby 2022-09-20 19:51:22 +12:00
parent fbcaa1f60a
commit bf0b416183
No known key found for this signature in database
GPG key ID: C437A8CC85B96E9C
3 changed files with 28 additions and 55 deletions

View file

@ -7,6 +7,7 @@ use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response; use Appwrite\Utopia\Response;
use Utopia\App; use Utopia\App;
use Utopia\Database\Database; use Utopia\Database\Database;
use Utopia\Database\ID;
use Utopia\Exception; use Utopia\Exception;
use Utopia\Route; use Utopia\Route;
@ -114,12 +115,7 @@ class Resolvers
$swoole->post = [ $swoole->post = [
'databaseId' => $databaseId, 'databaseId' => $databaseId,
'collectionId' => $collectionId, 'collectionId' => $collectionId,
'limit' => $args['limit'], 'queries' => $args['queries'],
'offset' => $args['offset'],
'cursor' => $args['cursor'],
'cursorDirection' => $args['cursorDirection'],
'orderAttributes' => $args['orderAttributes'],
'orderType' => $args['orderType'],
]; ];
$swoole->server['request_method'] = 'GET'; $swoole->server['request_method'] = 'GET';
$swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents"; $swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents";
@ -154,13 +150,11 @@ class Resolvers
$response = $utopia->getResource('response', true); $response = $utopia->getResource('response', true);
$swoole = $request->getSwoole(); $swoole = $request->getSwoole();
$id = $args['id'] ?? 'unique()'; $id = $args['id'] ?? ID::unique();
$read = $args['read']; $permissions = $args['permissions'];
$write = $args['write'];
unset($args['id']); unset($args['id']);
unset($args['read']); unset($args['permissions']);
unset($args['write']);
// Order must be the same as the route params // Order must be the same as the route params
$swoole->post = [ $swoole->post = [
@ -168,8 +162,7 @@ class Resolvers
'documentId' => $id, 'documentId' => $id,
'collectionId' => $collectionId, 'collectionId' => $collectionId,
'data' => $args, 'data' => $args,
'read' => $read, 'permissions' => $permissions,
'write' => $write,
]; ];
$swoole->server['request_method'] = $method; $swoole->server['request_method'] = $method;
$swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents"; $swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents";
@ -256,9 +249,9 @@ class Resolvers
return; return;
} }
if (\array_key_exists('$id', $payload)) { $payload = \array_map(function ($property) {
$payload['_id'] = $payload['$id']; return \str_replace('$', '_', $property);
} }, $payload);
$resolve($payload); $resolve($payload);
} }

View file

@ -10,6 +10,7 @@ use Swoole\Coroutine\WaitGroup;
use Swoole\Http\Response as SwooleResponse; use Swoole\Http\Response as SwooleResponse;
use Utopia\App; use Utopia\App;
use Utopia\Database\Database; use Utopia\Database\Database;
use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\Authorization;
use Utopia\Registry\Registry; use Utopia\Registry\Registry;
use Utopia\Route; use Utopia\Route;
@ -124,7 +125,7 @@ class SchemaBuilder
foreach ($responseModels as $responseModel) { foreach ($responseModels as $responseModel) {
$type = TypeRegistry::get($responseModel->getType()); $type = TypeRegistry::get($responseModel->getType());
$description = $route->getDesc(); $description = $route->getDesc();
$args = []; $params = [];
foreach ($route->getParams() as $key => $value) { foreach ($route->getParams() as $key => $value) {
$argType = TypeMapper::typeFromParameter( $argType = TypeMapper::typeFromParameter(
@ -133,7 +134,7 @@ class SchemaBuilder
!$value['optional'], !$value['optional'],
$value['injections'] $value['injections']
); );
$args[$key] = [ $params[$key] = [
'type' => $argType, 'type' => $argType,
'description' => $value['description'], 'description' => $value['description'],
'defaultValue' => $value['default'] 'defaultValue' => $value['default']
@ -143,7 +144,7 @@ class SchemaBuilder
$field = [ $field = [
'type' => $type, 'type' => $type,
'description' => $description, 'description' => $description,
'args' => $args, 'args' => $params,
'resolve' => Resolvers::resolveAPIRequest($utopia, $route) 'resolve' => Resolvers::resolveAPIRequest($utopia, $route)
]; ];
@ -196,9 +197,11 @@ class SchemaBuilder
while ( while (
!empty($attrs = Authorization::skip(fn() => $dbForProject->find( !empty($attrs = Authorization::skip(fn() => $dbForProject->find(
'attributes', collection: 'attributes',
limit: $limit, queries: [
offset: $offset Query::limit($limit),
Query::offset($offset),
]
))) )))
) { ) {
$wg->add(); $wg->add();
@ -223,10 +226,12 @@ class SchemaBuilder
foreach ($collections as $collectionId => $attributes) { foreach ($collections as $collectionId => $attributes) {
$objectType = new ObjectType([ $objectType = new ObjectType([
'name' => $collectionId, 'name' => $collectionId,
'fields' => \array_merge( 'fields' => [
["_id" => ['type' => Type::string()]], "_id" => [
$attributes 'type' => Type::string()
), ],
...$attributes
],
]); ]);
$attributes = \array_merge( $attributes = \array_merge(
$attributes, $attributes,

View file

@ -44,40 +44,15 @@ class TypeRegistry
], ],
], ],
'list' => [ 'list' => [
'limit' => [ 'queries' => [
'type' => Type::int(),
'defaultValue' => 25,
],
'offset' => [
'type' => Type::int(),
'defaultValue' => 0,
],
'cursor' => [
'type' => Type::string(),
'defaultValue' => '',
],
'cursorDirection' => [
'type' => Type::string(),
'defaultValue' => Database::CURSOR_AFTER,
],
'orderAttributes' => [
'type' => Type::listOf(Type::string()), 'type' => Type::listOf(Type::string()),
'defaultValue' => [],
],
'orderTypes' => [
'type' => Type::listOf(Type::string()),
'defaultValue' => [],
], ],
], ],
'mutate' => [ 'mutate' => [
'read' => [ 'permissions' => [
'type' => Type::listOf(Type::string()), 'type' => Type::listOf(Type::string()),
'defaultValue' => ['role:member'], 'defaultValue' => [],
], ]
'write' => [
'type' => Type::listOf(Type::string()),
'defaultValue' => ['role:member'],
],
], ],
]; ];