diff --git a/.gitignore b/.gitignore index 643b389b6..fd6636480 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules/ build vendor js/ +.idea/ diff --git a/lib/Command/Group.php b/lib/Command/Group.php index 992e22313..04e041483 100644 --- a/lib/Command/Group.php +++ b/lib/Command/Group.php @@ -25,6 +25,7 @@ use OCA\Circles\CirclesManager; use OCA\Circles\Model\Probes\CircleProbe; use OCA\GroupFolders\Folder\FolderManager; +use OCP\Circles\ICirclesManager; use OCP\Constants; use OCP\Files\IRootFolder; use OCP\IGroupManager; @@ -46,11 +47,20 @@ class Group extends Base { private $rootFolder; private $groupManager; - public function __construct(FolderManager $folderManager, IRootFolder $rootFolder, IGroupManager $groupManager) { + /** @var ICirclesManager */ + private $circlesManager; + + public function __construct( + FolderManager $folderManager, + IRootFolder $rootFolder, + IGroupManager $groupManager, + ICirclesManager $circlesManager + ) { parent::__construct(); $this->folderManager = $folderManager; $this->rootFolder = $rootFolder; $this->groupManager = $groupManager; + $this->circlesManager = $circlesManager; } protected function configure() { @@ -72,13 +82,11 @@ protected function execute(InputInterface $input, OutputInterface $output) { $groupString = $input->getArgument('group'); // confirmation that $groupString is a valid CircleId - /** @var CirclesManager $circlesManager */ - $circlesManager = \OC::$server->get(CirclesManager::class); - $circlesManager->startSuperSession(); + $this->circlesManager->startSuperSession(); $probe = new CircleProbe(); $probe->includeSystemCircles(); - $circlesManager->getCircle($groupString); + $this->circlesManager->getCircle($groupString); // $group = $this->groupManager->get($groupString); if ($input->getOption('delete')) { diff --git a/lib/Command/ListCommand.php b/lib/Command/ListCommand.php index 1f1c66059..2f70021d4 100644 --- a/lib/Command/ListCommand.php +++ b/lib/Command/ListCommand.php @@ -23,6 +23,7 @@ use OC\Core\Command\Base; use OCA\GroupFolders\Folder\FolderManager; +use OCP\Circles\ICirclesManager; use OCP\Constants; use OCP\Files\IRootFolder; use Symfony\Component\Console\Helper\Table; @@ -38,11 +39,13 @@ class ListCommand extends Base { ]; private $folderManager; + private $circlesManager; private $rootFolder; - public function __construct(FolderManager $folderManager, IRootFolder $rootFolder) { + public function __construct(FolderManager $folderManager, ICirclesManager $circlesManager, IRootFolder $rootFolder) { parent::__construct(); $this->folderManager = $folderManager; + $this->circlesManager = $circlesManager; $this->rootFolder = $rootFolder; } @@ -54,6 +57,7 @@ protected function configure() { } protected function execute(InputInterface $input, OutputInterface $output) { + $this->circlesManager->startSuperSession(); $folders = $this->folderManager->getAllFoldersWithSize($this->rootFolder->getMountPoint()->getNumericStorageId()); usort($folders, function ($a, $b) { return $a['id'] - $b['id']; @@ -73,12 +77,13 @@ protected function execute(InputInterface $input, OutputInterface $output) { $this->writeArrayInOutputFormat($input, $output, $folders); } else { $table = new Table($output); - $table->setHeaders(['Folder Id', 'Name', 'Groups', 'Quota', 'Size', 'Advanced Permissions', 'Manage advanced permissions']); + $table->setHeaders(['Folder Id', 'Name', 'Groups', 'Display Name', 'Quota', 'Size', 'Advanced Permissions', 'Manage advanced permissions']); $table->setRows(array_map(function ($folder) { $folder['size'] = \OCP\Util::humanFileSize($folder['size']); $folder['quota'] = ($folder['quota'] > 0) ? \OCP\Util::humanFileSize($folder['quota']) : 'Unlimited'; $groupStrings = array_map(function (string $groupId, int $permissions) { - return $groupId . ': ' . $this->permissionsToString($permissions); + $circle = $this->circlesManager->getCircle($groupId); + return $circle->getDisplayName(). ' (' . $groupId . ') : ' . $this->permissionsToString($permissions); }, array_keys($folder['groups']), array_values($folder['groups'])); $folder['groups'] = implode("\n", $groupStrings); $folder['acl'] = $folder['acl'] ? 'Enabled' : 'Disabled'; @@ -86,6 +91,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { return $manage['id'] . ' (' . $manage['type'] . ')'; }, $folder['manage']); $folder['manage'] = implode("\n", $manageStrings); + return $folder; }, $folders)); $table->render(); diff --git a/lib/Controller/FolderController.php b/lib/Controller/FolderController.php index cb220bf07..42b8cff32 100644 --- a/lib/Controller/FolderController.php +++ b/lib/Controller/FolderController.php @@ -26,11 +26,14 @@ use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCSController; use OCP\Files\IRootFolder; +use OCP\IGroupManager; use OCP\IRequest; class FolderController extends OCSController { /** @var FolderManager */ private $manager; + /** @var IGroupManager */ + private $groupManager; /** @var MountProvider */ private $mountProvider; /** @var IRootFolder */ @@ -42,12 +45,14 @@ public function __construct( $AppName, IRequest $request, FolderManager $manager, + IGroupManager $groupManager, MountProvider $mountProvider, IRootFolder $rootFolder, $userId ) { parent::__construct($AppName, $request); $this->manager = $manager; + $this->groupManager = $groupManager; $this->mountProvider = $mountProvider; $this->rootFolder = $rootFolder; $this->userId = $userId; @@ -209,22 +214,25 @@ private function folderDataForXML($data) { /** * @NoAdminRequired - * @param $id + * + * @param int $id * @param $fileId + * @param string $source * @param string $search + * * @return DataResponse */ - public function aclMappingSearch($id, $fileId, $search = ''): DataResponse { - $users = []; - $groups = []; - + public function aclMappingSearch(int $id, $fileId, string $source = '', string $search = ''): DataResponse { + $entities = []; if ($this->manager->canManageACL($id, $this->userId) === true) { - $groups = $this->manager->searchGroups($id, $search); - $users = $this->manager->searchUsers($id, $search); + $entities = $this->manager->searchEntities( + $id, + $search, + ($this->groupManager->isAdmin($this->userId) && $source === 'settings') + ); } return new DataResponse([ - 'users' => $users, - 'groups' => $groups, + 'entities' => $entities ]); } } diff --git a/lib/Folder/FolderManager.php b/lib/Folder/FolderManager.php index 92b925213..6c24823fa 100644 --- a/lib/Folder/FolderManager.php +++ b/lib/Folder/FolderManager.php @@ -22,8 +22,20 @@ namespace OCA\GroupFolders\Folder; use OC\Files\Cache\Cache; -use OCA\Circles\CirclesManager; +use OCA\Circles\Exceptions\CircleNotFoundException; +use OCA\Circles\Exceptions\FederatedItemException; +use OCA\Circles\Exceptions\FederatedUserException; +use OCA\Circles\Exceptions\FederatedUserNotFoundException; +use OCA\Circles\Exceptions\InitiatorNotFoundException; +use OCA\Circles\Exceptions\InvalidIdException; +use OCA\Circles\Exceptions\RemoteInstanceException; +use OCA\Circles\Exceptions\RemoteNotFoundException; +use OCA\Circles\Exceptions\RemoteResourceNotFoundException; +use OCA\Circles\Exceptions\RequestBuilderException; +use OCA\Circles\Exceptions\SingleCircleNotFoundException; +use OCA\Circles\Exceptions\UnknownRemoteException; use OCA\GroupFolders\Mount\GroupFolderStorage; +use OCP\Circles\ICirclesManager; use OCP\Constants; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Files\IMimeTypeLoader; @@ -38,10 +50,18 @@ class FolderManager { /** @var IGroupManager */ private $groupManager; + /** @var ICirclesManager */ + private $circlesManager; + /** @var IMimeTypeLoader */ private $mimeTypeLoader; - public function __construct(IDBConnection $connection, IGroupManager $groupManager = null, IMimeTypeLoader $mimeTypeLoader = null) { + public function __construct( + IDBConnection $connection, + IGroupManager $groupManager = null, + ICirclesManager $circlesManager, + IMimeTypeLoader $mimeTypeLoader = null + ) { $this->connection = $connection; // files_fulltextsearch compatibility @@ -52,6 +72,7 @@ public function __construct(IDBConnection $connection, IGroupManager $groupManag $mimeTypeLoader = \OC::$server->getMimeTypeLoader(); } $this->groupManager = $groupManager; + $this->circlesManager = $circlesManager; $this->mimeTypeLoader = $mimeTypeLoader; } @@ -66,7 +87,7 @@ public function getAllFolders(): array { $query = $this->connection->getQueryBuilder(); $query->select('folder_id', 'mount_point', 'quota', 'acl') - ->from('group_folders', 'f'); + ->from('group_folders', 'f'); $rows = $query->execute()->fetchAll(); @@ -116,7 +137,7 @@ public function getAllFoldersWithSize($rootStorageId): array { $query = $this->connection->getQueryBuilder(); $query->select('folder_id', 'mount_point', 'quota', 'size', 'acl') - ->from('group_folders', 'f'); + ->from('group_folders', 'f'); $this->joinQueryWithFileCache($query, $rootStorageId); $rows = $query->execute()->fetchAll(); @@ -147,19 +168,33 @@ public function getAllFoldersWithSize($rootStorageId): array { * @psalm-return array> */ private function getAllFolderMappings(): array { - $query = $this->connection->getQueryBuilder(); + $queryHelper = $this->circlesManager->getQueryHelper(); + $query = $queryHelper->getQueryBuilder(); + $query->select('*') - ->from('group_folders_manage'); + ->from('group_folders_manage', 'm'); + + $queryHelper->addCircleDetails('m', 'mapping_id'); + $rows = $query->execute()->fetchAll(); $folderMap = []; foreach ($rows as $row) { $id = (int)$row['folder_id']; + $circle = $queryHelper->extractCircle($row); + $data = [ + 'folder_id' => $row['folder_id'], + 'mapping_type' => $row['mapping_type'], + 'mapping_id' => $row['mapping_id'], + 'displayName' => $circle->getDisplayName(), + 'definition' => $this->circlesManager->getDefinition($circle) + ]; + if (!isset($folderMap[$id])) { - $folderMap[$id] = [$row]; + $folderMap[$id] = [$data]; } else { - $folderMap[$id][] = $row; + $folderMap[$id][] = $data; } } @@ -167,19 +202,30 @@ private function getAllFolderMappings(): array { } private function getManageAcl($mappings): array { - return array_filter(array_map(function ($entry) { - if ($entry['mapping_type'] === 'user') { - $user = \OC::$server->getUserManager()->get($entry['mapping_id']); - if ($user === null) { - return null; - } - return [ - 'type' => 'user', - 'id' => $user->getUID(), - 'displayname' => $user->getDisplayName() - ]; - } - $group = \OC::$server->getGroupManager()->get($entry['mapping_id']); + return array_filter( + array_map( + function ($entry) { + if ($entry['mapping_type'] === 'entity') { + return [ + 'type' => $entry['definition'], + 'id' => $entry['mapping_id'], + 'displayname' => $entry['displayName'] + ]; + } + + if ($entry['mapping_type'] === 'user') { + $user = \OC::$server->getUserManager()->get($entry['mapping_id']); + if ($user === null) { + return null; + } + + return [ + 'type' => 'user', + 'id' => $user->getUID(), + 'displayname' => $user->getDisplayName() + ]; + } + $group = \OC::$server->getGroupManager()->get($entry['mapping_id']); if ($group === null) { return []; } @@ -238,7 +284,7 @@ private function getAllApplicable(bool $permissionOnly = true): array { $query = $this->connection->getQueryBuilder(); $query->select('folder_id', 'group_id', 'permissions') - ->from('group_folders_groups'); + ->from('group_folders_groups'); $rows = $query->execute()->fetchAll(); @@ -254,17 +300,64 @@ private function getAllApplicable(bool $permissionOnly = true): array { return $applicableMap; } - private function getGroups($id): array { + + /** + * @param int $id + * @param bool $asAdmin + * + * @return array + * @throws InitiatorNotFoundException + * @throws RequestBuilderException + * @throws FederatedItemException + * @throws FederatedUserException + * @throws FederatedUserNotFoundException + * @throws InvalidIdException + * @throws RemoteInstanceException + * @throws RemoteNotFoundException + * @throws RemoteResourceNotFoundException + * @throws SingleCircleNotFoundException + * @throws UnknownRemoteException + */ + private function getEntities(int $id, bool $asAdmin = false): array { + if ($asAdmin) { + $this->circlesManager->startSuperSession(); + } else { + $this->circlesManager->startSession(); + } + $groups = $this->getAllApplicable()[$id] ?? []; - $groups = array_map(function ($gid) { - return $this->groupManager->get($gid); - }, array_keys($groups)); - return array_map(function ($group) { - return [ - 'gid' => $group->getGID(), - 'displayname' => $group->getDisplayName() + $entities = []; + foreach (array_keys($groups) as $gid) { + try { + $circle = $this->circlesManager->getCircle($gid); + } catch (CircleNotFoundException $e) { + continue; + } + + $entities[$circle->getSingleId()] = [ + 'singleId' => $circle->getSingleId(), + 'displayName' => $circle->getDisplayName(), + 'definition' => $this->circlesManager->getDefinition($circle) ]; - }, array_filter($groups)); + foreach ($circle->getInheritedMembers(false) as $member) { + if ($member->hasBasedOn()) { + $basedOn = $member->getBasedOn(); + $entities[$basedOn->getSingleId()] = [ + 'singleId' => $basedOn->getSingleId(), + 'displayName' => $basedOn->getDisplayName(), + 'definition' => $this->circlesManager->getDefinition($basedOn) + ]; + } else { + $entities[$member->getSingleId()] = [ + 'singleId' => $member->getSingleId(), + 'displayName' => $member->getDisplayName(), + 'definition' => $this->circlesManager->getDefinition($member) + ]; + } + } + } + + return array_values($entities); } public function canManageACL($folderId, $userId): bool { @@ -274,61 +367,69 @@ public function canManageACL($folderId, $userId): bool { $query = $this->connection->getQueryBuilder(); $query->select('*') - ->from('group_folders_manage') - ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))) - ->andWhere($query->expr()->eq('mapping_type', $query->createNamedParameter('user'))) - ->andWhere($query->expr()->eq('mapping_id', $query->createNamedParameter($userId))); + ->from('group_folders_manage') + ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))) + ->andWhere($query->expr()->eq('mapping_type', $query->createNamedParameter('user'))) + ->andWhere($query->expr()->eq('mapping_id', $query->createNamedParameter($userId))); if ($query->execute()->rowCount() === 1) { return true; } $query = $this->connection->getQueryBuilder(); $query->select('*') - ->from('group_folders_manage') - ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))) - ->andWhere($query->expr()->eq('mapping_type', $query->createNamedParameter('group'))); + ->from('group_folders_manage') + ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))) + ->andWhere($query->expr()->eq('mapping_type', $query->createNamedParameter('group'))); $groups = $query->execute()->fetchAll(); foreach ($groups as $manageRule) { if ($this->groupManager->isInGroup($userId, $manageRule['mapping_id'])) { return true; } } + return false; } - public function searchGroups($id, $search = ''): array { - $groups = $this->getGroups($id); + public function searchEntities($id, $search = '', bool $asAdmin = false): array { + $groups = $this->getEntities($id, $asAdmin); if ($search === '') { return $groups; } - return array_filter($groups, function ($group) use ($search) { - return (stripos($group['gid'], $search) !== false) || (stripos($group['displayname'], $search) !== false); - }); - } - public function searchUsers($id, $search = '', $limit = 10, $offset = 0): array { - $groups = $this->getGroups($id); - $users = []; - foreach ($groups as $groupArray) { - $group = $this->groupManager->get($groupArray['gid']); - if ($group) { - $foundUsers = $this->groupManager->displayNamesInGroup($group->getGID(), $search, $limit, $offset); - foreach ($foundUsers as $uid => $displayName) { - if (!isset($users[$uid])) { - $users[$uid] = [ - 'uid' => $uid, - 'displayname' => $displayName - ]; - } + return array_values( + array_filter( + $groups, + function ($group) use ($search) { + return (stripos($group['displayName'], $search) !== false); } - } - } - return array_values($users); + ) + ); } +// public function searchUsers($id, $search = '', $limit = 10, $offset = 0): array { +// $groups = $this->getEntities($id); +// $users = []; +// foreach ($groups as $groupArray) { +// $group = $this->groupManager->get($groupArray['gid']); +// if ($group) { +// $foundUsers = $this->groupManager->displayNamesInGroup($group->getGID(), $search, $limit, $offset); +// foreach ($foundUsers as $uid => $displayName) { +// if (!isset($users[$uid])) { +// $users[$uid] = [ +// 'uid' => $uid, +// 'displayname' => $displayName +// ]; +// } +// } +// } +// } +// return array_values($users); +// } + /** * @param string $groupId * @param int $rootStorageId + * * @return array[] */ public function getFoldersForGroup($groupId, $rootStorageId = 0) { @@ -352,16 +453,16 @@ public function getFoldersForGroup($groupId, $rootStorageId = 0) { 'encrypted', 'parent' ) - ->selectAlias('a.permissions', 'group_permissions') - ->selectAlias('c.permissions', 'permissions') - ->from('group_folders', 'f') - ->innerJoin( - 'f', - 'group_folders_groups', - 'a', - $query->expr()->eq('f.folder_id', 'a.folder_id') - ) - ->where($query->expr()->eq('a.group_id', $query->createNamedParameter($groupId))); + ->selectAlias('a.permissions', 'group_permissions') + ->selectAlias('c.permissions', 'permissions') + ->from('group_folders', 'f') + ->innerJoin( + 'f', + 'group_folders_groups', + 'a', + $query->expr()->eq('f.folder_id', 'a.folder_id') + ) + ->where($query->expr()->eq('a.group_id', $query->createNamedParameter($groupId))); $this->joinQueryWithFileCache($query, $rootStorageId); $result = $query->execute()->fetchAll(); @@ -403,12 +504,12 @@ public function getFoldersForGroups(array $groupIds, $rootStorageId = 0): array 'encrypted', 'parent' ) - ->selectAlias('a.permissions', 'group_permissions') - ->selectAlias('c.permissions', 'permissions') - ->from('group_folders', 'f') - ->innerJoin( - 'f', - 'group_folders_groups', + ->selectAlias('a.permissions', 'group_permissions') + ->selectAlias('c.permissions', 'permissions') + ->from('group_folders', 'f') + ->innerJoin( + 'f', + 'group_folders_groups', 'a', $query->expr()->eq('f.folder_id', 'a.folder_id') ) @@ -435,10 +536,8 @@ public function getFoldersForGroups(array $groupIds, $rootStorageId = 0): array * @return array[] */ public function getFolders($rootStorageId = 0): array { - /** @var CirclesManager $circlesManager */ - $circlesManager = \OC::$server->get(CirclesManager::class); - $circlesManager->startSession(); - $queryHelper = $circlesManager->getQueryHelper(); + $this->circlesManager->startSession(); + $queryHelper = $this->circlesManager->getQueryHelper(); $query = $queryHelper->getQueryBuilder(); $query->select( @@ -553,8 +652,8 @@ public function setManageACL($folderId, $type, $id, $manageAcl): void { } else { $query->delete('group_folders_manage') ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))) - ->andWhere($query->expr()->eq('mapping_type', $query->createNamedParameter($type))) - ->andWhere($query->expr()->eq('mapping_id', $query->createNamedParameter($id))); + ->andWhere($query->expr()->eq('mapping_type', $query->createNamedParameter($type))) + ->andWhere($query->expr()->eq('mapping_id', $query->createNamedParameter($id))); } $query->execute(); } @@ -571,8 +670,8 @@ public function setFolderQuota($folderId, $quota): void { $query = $this->connection->getQueryBuilder(); $query->update('group_folders') - ->set('quota', $query->createNamedParameter($quota)) - ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))); + ->set('quota', $query->createNamedParameter($quota)) + ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))); $query->execute(); } @@ -589,7 +688,7 @@ public function deleteGroup($groupId): void { $query = $this->connection->getQueryBuilder(); $query->delete('group_folders_groups') - ->where($query->expr()->eq('group_id', $query->createNamedParameter($groupId))); + ->where($query->expr()->eq('group_id', $query->createNamedParameter($groupId))); $query->execute(); } @@ -597,14 +696,14 @@ public function setFolderACL($folderId, bool $acl): void { $query = $this->connection->getQueryBuilder(); $query->update('group_folders') - ->set('acl', $query->createNamedParameter((int)$acl, IQueryBuilder::PARAM_INT)) - ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))); + ->set('acl', $query->createNamedParameter((int)$acl, IQueryBuilder::PARAM_INT)) + ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))); $query->execute(); if ($acl === false) { $query = $this->connection->getQueryBuilder(); $query->delete('group_folders_manage') - ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))); + ->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId))); $query->execute(); } } diff --git a/src/settings/Api.ts b/src/settings/Api.ts index a2ac02510..e4466df89 100644 --- a/src/settings/Api.ts +++ b/src/settings/Api.ts @@ -7,6 +7,12 @@ export interface Group { displayname: string; } +export interface Entity { + singleId: string; + displayName: string; + definition: string; +} + export interface OCSUser { uid: string; displayname: string; @@ -46,7 +52,15 @@ export class Api { listGroups(): Thenable { const version = parseInt(OC.config.version, 10); - if (version >= 14) { + if (version >= 22) { + return $.getJSON(OC.linkToOCS('cloud', 1) + 'admin/entities/details?filter=-single') + .then((data: OCSResult<{ entities: Entity[]; }>) => data.ocs.data.entities.map(entity => { + return { + id: entity.singleId, + displayname: entity.displayName + ' (' + entity.definition + ')' + }; + })); + } else if (version >= 14) { return $.getJSON(OC.linkToOCS('cloud', 1) + 'groups/details') .then((data: OCSResult<{ groups: Group[]; }>) => data.ocs.data.groups); } else { @@ -118,24 +132,19 @@ export class Api { }); } - aclMappingSearch(folderId: number, search: string): Thenable<{groups: OCSGroup[], users: OCSUser[]}> { - return $.getJSON(this.getUrl(`folders/${folderId}/search?format=json&search=${search}`)) - .then((data: OCSResult<{ groups: OCSGroup[]; users: OCSUser[]; }>) => { + aclMappingSearch(folderId: number, search: string): Thenable<{groups: OCSGroup[], users: OCSUser[], entities: Entity[]}> { + return $.getJSON(this.getUrl(`folders/${folderId}/search?format=json&source=settings&search=${search}`)) + .then((data: OCSResult<{ entities: Entity[]; groups: OCSGroup; users: OCSUser; }>) => { return { - groups: Object.values(data.ocs.data.groups).map((item) => { + entities: Object.values(data.ocs.data.entities).map((item) => { return { - type: 'group', - id: item.gid, - displayname: item.displayname + type: item.definition, + id: item.singleId, + displayname: item.displayName } }), - users: Object.values(data.ocs.data.users).map((item) => { - return { - type: 'user', - id: item.uid, - displayname: item.displayname - } - }) + groups: [], + users: [] } }); } diff --git a/src/settings/App.tsx b/src/settings/App.tsx index e6743fc84..a28dc9278 100644 --- a/src/settings/App.tsx +++ b/src/settings/App.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import {ChangeEvent, Component, FormEvent} from 'react'; -import {Api, Folder, Group, ManageRuleProps, OCSGroup, OCSUser} from './Api'; +import {Api, Entity, Folder, Group, ManageRuleProps, OCSGroup, OCSUser} from './Api'; import {FolderGroups} from './FolderGroups'; import {QuotaSelect} from './QuotaSelect'; import './App.scss'; @@ -320,7 +320,7 @@ export class App extends Component<{}, AppState> implements OC.Plugin void; - onSearch: (name: string) => Thenable<{ groups: OCSGroup[]; users: OCSUser[]; }>; + onSearch: (name: string) => Thenable<{ groups: OCSGroup[]; users: OCSUser[]; entities: Entity[]; }>; }; @@ -329,13 +329,14 @@ function ManageAclSelect({onChange, onSearch, folder}: ManageAclSelectProps) { const handleSearch = (inputValue: string) => { return new Promise(resolve => { onSearch(inputValue).then((result) => { - resolve([...result.groups, ...result.users]) + resolve([...result.groups, ...result.users, ...result.entities]) }) }) } const typeLabel = (item) => { - return item.type === 'user' ? 'User' : 'Group' + // return item.type === 'user' ? 'User' : 'Group' + return item.type } return