2 namespace wcf\system\category
;
3 use wcf\data\category\Category
;
4 use wcf\data\user\User
;
5 use wcf\system\cache\builder\CategoryACLOptionCacheBuilder
;
6 use wcf\system\SingletonFactory
;
10 * Handles the category permissions.
12 * @author Matthias Schmidt
13 * @copyright 2001-2018 WoltLab GmbH
14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
15 * @package WoltLabSuite\Core\System\Category
17 class CategoryPermissionHandler
extends SingletonFactory
{
19 * cached category acl options
22 protected $categoryPermissions = [];
25 * Returns the acl options for the given category and for the given user.
26 * If no user is given, the active user is used.
28 * @param Category $category
32 public function getPermissions(Category
$category, User
$user = null) {
34 $user = WCF
::getUser();
38 if (isset($this->categoryPermissions
[$category->categoryID
])) {
39 if (isset($this->categoryPermissions
[$category->categoryID
]['group'])) {
40 foreach ($user->getGroupIDs() as $groupID) {
41 if (isset($this->categoryPermissions
[$category->categoryID
]['group'][$groupID])) {
42 foreach ($this->categoryPermissions
[$category->categoryID
]['group'][$groupID] as $optionName => $optionValue) {
43 if (isset($permissions[$optionName])) {
44 $permissions[$optionName] = $permissions[$optionName] ||
$optionValue;
47 $permissions[$optionName] = $optionValue;
54 if (isset($this->categoryPermissions
[$category->categoryID
]['user']) && isset($this->categoryPermissions
[$category->categoryID
]['user'][$user->userID
])) {
55 foreach ($this->categoryPermissions
[$category->categoryID
]['user'][$user->userID
] as $optionName => $optionValue) {
56 $permissions[$optionName] = $optionValue;
67 protected function init() {
68 $this->categoryPermissions
= CategoryACLOptionCacheBuilder
::getInstance()->getData();
72 * Resets the category permission cache.
74 public function resetCache() {
75 CategoryACLOptionCacheBuilder
::getInstance()->reset();