1
0
Fork 0
mirror of synced 2024-05-20 12:42:39 +12:00

feat(database): add colection enable/disable

This commit is contained in:
Torsten Dittmann 2021-12-13 13:42:04 +01:00
parent 8179bc1a8f
commit 6c6992a3f7
8 changed files with 62 additions and 17 deletions

View file

@ -43,6 +43,17 @@ $collections = [
'array' => false,
'filters' => [],
],
[
'$id' => 'enabled',
'type' => Database::VAR_BOOLEAN,
'signed' => true,
'size' => 0,
'format' => '',
'filters' => [],
'required' => true,
'default' => null,
'array' => false,
],
[
'$id' => 'permission',
'type' => Database::VAR_STRING,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -175,6 +175,7 @@ App::post('/v1/database/collections')
'permission' => $permission, // Permissions model type (document vs collection)
'dateCreated' => time(),
'dateUpdated' => time(),
'enabled' => true,
'name' => $name,
'search' => implode(' ', [$collectionId, $name]),
]));
@ -605,11 +606,12 @@ App::put('/v1/database/collections/:collectionId')
->param('permission', null, new WhiteList(['document', 'collection']), 'Permissions type model to use for reading documents in this collection. You can use collection-level permission set once on the collection using the `read` and `write` params, or you can set document-level permission where each document read and write params will decide who has access to read and write to each document individually. [learn more about permissions](/docs/permissions) and get a full list of available permissions.')
->param('read', null, new Permissions(), 'An array of strings with read permissions. By default inherits the existing read permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.', true)
->param('write', null, new Permissions(), 'An array of strings with write permissions. By default inherits the existing write permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.', true)
->param('enabled', true, new Boolean(), 'Is collection enabled?', true)
->inject('response')
->inject('dbForInternal')
->inject('audits')
->inject('usage')
->action(function ($collectionId, $name, $permission, $read, $write, $response, $dbForInternal, $audits, $usage) {
->action(function ($collectionId, $name, $permission, $read, $write, $enabled, $response, $dbForInternal, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal */
/** @var Appwrite\Event\Event $audits */
@ -621,8 +623,9 @@ App::put('/v1/database/collections/:collectionId')
throw new Exception('Collection not found', 404);
}
$read = (is_null($read)) ? ($collection->getRead() ?? []) : $read; // By default inherit read permissions
$write = (is_null($write)) ? ($collection->getWrite() ?? []) : $write; // By default inherit write permissions
$read ??= $collection->getRead() ?? []; // By default inherit read permissions
$write ??= $collection->getWrite() ?? []; // By default inherit write permissions
$enabled ??= $collection->getAttribute('enabled', true);
try {
$collection = $dbForInternal->updateDocument('collections', $collection->getId(), $collection
@ -631,6 +634,7 @@ App::put('/v1/database/collections/:collectionId')
->setAttribute('name', $name)
->setAttribute('permission', $permission)
->setAttribute('dateUpdated', time())
->setAttribute('enabled', $enabled)
->setAttribute('search', implode(' ', [$collectionId, $name]))
);
}
@ -1603,13 +1607,15 @@ App::post('/v1/database/collections/:collectionId/documents')
->inject('user')
->inject('audits')
->inject('usage')
->action(function ($documentId, $collectionId, $data, $read, $write, $response, $dbForInternal, $dbForExternal, $user, $audits, $usage) {
->inject('mode')
->action(function ($documentId, $collectionId, $data, $read, $write, $response, $dbForInternal, $dbForExternal, $user, $audits, $usage, $mode) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal */
/** @var Utopia\Database\Database $dbForExternal */
/** @var Utopia\Database\Document $user */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
/** @var string $mode */
$data = (\is_string($data)) ? \json_decode($data, true) : $data; // Cast to JSON array
@ -1623,7 +1629,7 @@ App::post('/v1/database/collections/:collectionId/documents')
$collection = $dbForInternal->getDocument('collections', $collectionId);
if ($collection->isEmpty()) {
if ($collection->isEmpty() || (!$collection->getAttribute('enabled') && $mode !== APP_MODE_ADMIN )) {
throw new Exception('Collection not found', 404);
}
@ -1711,15 +1717,17 @@ App::get('/v1/database/collections/:collectionId/documents')
->inject('dbForInternal')
->inject('dbForExternal')
->inject('usage')
->action(function ($collectionId, $queries, $limit, $offset, $cursor, $cursorDirection, $orderAttributes, $orderTypes, $response, $dbForInternal, $dbForExternal, $usage) {
->inject('mode')
->action(function ($collectionId, $queries, $limit, $offset, $cursor, $cursorDirection, $orderAttributes, $orderTypes, $response, $dbForInternal, $dbForExternal, $usage, $mode) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal */
/** @var Utopia\Database\Database $dbForExternal */
/** @var Appwrite\Stats\Stats $usage */
/** @var string $mode */
$collection = $dbForInternal->getDocument('collections', $collectionId);
if ($collection->isEmpty()) {
if ($collection->isEmpty() || (!$collection->getAttribute('enabled') && $mode !== APP_MODE_ADMIN )) {
throw new Exception('Collection not found', 404);
}
@ -1788,14 +1796,16 @@ App::get('/v1/database/collections/:collectionId/documents/:documentId')
->inject('dbForInternal')
->inject('dbForExternal')
->inject('usage')
->action(function ($collectionId, $documentId, $response, $dbForInternal, $dbForExternal, $usage) {
->inject('mode')
->action(function ($collectionId, $documentId, $response, $dbForInternal, $dbForExternal, $usage, $mode) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $$dbForInternal */
/** @var Utopia\Database\Database $dbForExternal */
/** @var string $mode */
$collection = $dbForInternal->getDocument('collections', $collectionId);
if ($collection->isEmpty()) {
if ($collection->isEmpty() || (!$collection->getAttribute('enabled') && $mode !== APP_MODE_ADMIN )) {
throw new Exception('Collection not found', 404);
}
@ -1957,16 +1967,18 @@ App::patch('/v1/database/collections/:collectionId/documents/:documentId')
->inject('dbForExternal')
->inject('audits')
->inject('usage')
->action(function ($collectionId, $documentId, $data, $read, $write, $response, $dbForInternal, $dbForExternal, $audits, $usage) {
->inject('mode')
->action(function ($collectionId, $documentId, $data, $read, $write, $response, $dbForInternal, $dbForExternal, $audits, $usage, $mode) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal */
/** @var Utopia\Database\Database $dbForExternal */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
/** @var string $mode */
$collection = $dbForInternal->getDocument('collections', $collectionId);
if ($collection->isEmpty()) {
if ($collection->isEmpty() || (!$collection->getAttribute('enabled') && $mode !== APP_MODE_ADMIN )) {
throw new Exception('Collection not found', 404);
}
@ -2070,16 +2082,18 @@ App::delete('/v1/database/collections/:collectionId/documents/:documentId')
->inject('events')
->inject('audits')
->inject('usage')
->action(function ($collectionId, $documentId, $response, $dbForInternal, $dbForExternal, $events, $audits, $usage) {
->inject('mode')
->action(function ($collectionId, $documentId, $response, $dbForInternal, $dbForExternal, $events, $audits, $usage, $mode) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForExternal */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
/** @var string $mode */
$collection = $dbForInternal->getDocument('collections', $collectionId);
if ($collection->isEmpty()) {
if ($collection->isEmpty() || (!$collection->getAttribute('enabled') && $mode !== APP_MODE_ADMIN )) {
throw new Exception('Collection not found', 404);
}

View file

@ -0,0 +1,14 @@
const sdk = new Appwrite();
sdk
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
let promise = sdk.functions.listRuntimes();
promise.then(function (response) {
console.log(response); // Success
}, function (error) {
console.log(error); // Failure
});

View file

@ -5,7 +5,7 @@ sdk
.setProject('5df5acd0d48c2') // Your project ID
;
let promise = sdk.projects.delete('[PROJECT_ID]', '[PASSWORD]');
let promise = sdk.projects.delete('[PROJECT_ID]', 'password');
promise.then(function (response) {
console.log(response); // Success

View file

@ -36,6 +36,12 @@ class Collection extends Model
'default' => '',
'example' => 'My Collection',
])
->addRule('enabled', [
'type' => self::TYPE_BOOLEAN,
'description' => 'Collection enabled.',
'default' => true,
'example' => false,
])
->addRule('permission', [
'type' => self::TYPE_STRING,
'description' => 'Collection permission model. Possible values: `document` or `collection`',