48 lines
1.3 KiB
PHP
48 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2024 F7cloud GmbH and F7cloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace OCA\Contacts\Service;
|
|
|
|
use OCP\IConfig;
|
|
use OCP\IGroup;
|
|
use OCP\IGroupManager;
|
|
use OCP\IUser;
|
|
use OCP\Share\IManager as IShareManager;
|
|
|
|
class GroupSharingService {
|
|
|
|
public function __construct(
|
|
private IConfig $config,
|
|
private IGroupManager $groupManager,
|
|
private IShareManager $shareManager,
|
|
) {
|
|
}
|
|
|
|
public function isGroupSharingAllowed(IUser $user): bool {
|
|
if (!$this->shareManager->allowGroupSharing()) {
|
|
return false;
|
|
}
|
|
|
|
$userGroups = $this->groupManager->getUserGroups($user);
|
|
$userGroupNames = array_map(static fn (IGroup $group) => $group->getGID(), $userGroups);
|
|
|
|
$excludeGroupList = json_decode($this->config->getAppValue('core', 'shareapi_exclude_groups_list', '[]'), true);
|
|
$excludeGroups = $this->config->getAppValue('core', 'shareapi_exclude_groups');
|
|
|
|
// "no" => Allow sharing for everyone
|
|
// "yes" => Exclude listed groups from sharing
|
|
// "allow" => Limit sharing to listed groups
|
|
return match ($excludeGroups) {
|
|
'yes' => count(array_intersect($userGroupNames, $excludeGroupList)) === 0,
|
|
'allow' => count(array_intersect($userGroupNames, $excludeGroupList)) > 0,
|
|
default => true,
|
|
};
|
|
}
|
|
}
|