diff --git a/database/2018_07_10_212820_added_general_and_forum_perms.php b/database/2018_07_10_212820_added_general_and_forum_perms.php new file mode 100644 index 00000000..b31d2370 --- /dev/null +++ b/database/2018_07_10_212820_added_general_and_forum_perms.php @@ -0,0 +1,30 @@ +exec(" + ALTER TABLE `msz_permissions` + ADD COLUMN `general_perms_allow` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `role_id`, + ADD COLUMN `general_perms_deny` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `general_perms_allow`, + ADD COLUMN `forum_perms_allow` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `news_perms_deny`, + ADD COLUMN `forum_perms_deny` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `forum_perms_allow`, + ADD COLUMN `comments_perms_allow` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `forum_perms_deny`, + ADD COLUMN `comments_perms_deny` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `comments_perms_allow`; + "); +} + +function migrate_down(PDO $conn): void +{ + $conn->exec(' + ALTER TABLE `msz_permissions` + DROP COLUMN `general_perms_allow`, + DROP COLUMN `general_perms_deny`, + DROP COLUMN `forum_perms_allow`, + DROP COLUMN `forum_perms_deny, + DROP COLUMN `forum_perms_allow`, + DROP COLUMN `forum_perms_deny`; + '); +} diff --git a/misuzu.php b/misuzu.php index 6ef46ec6..29b82eca 100644 --- a/misuzu.php +++ b/misuzu.php @@ -6,6 +6,8 @@ date_default_timezone_set('UTC'); require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/src/changelog.php'; require_once __DIR__ . '/src/colour.php'; +require_once __DIR__ . '/src/comments.php'; +require_once __DIR__ . '/src/general.php'; require_once __DIR__ . '/src/git.php'; require_once __DIR__ . '/src/manage.php'; require_once __DIR__ . '/src/news.php'; @@ -84,7 +86,7 @@ if (PHP_SAPI !== 'cli') { } $inManageMode = starts_with($_SERVER['REQUEST_URI'], '/manage'); - $hasManageAccess = perms_check(perms_get_user(MSZ_PERMS_USER, $app->getUserId()), MSZ_USER_PERM_CAN_MANAGE); + $hasManageAccess = perms_check(perms_get_user(MSZ_PERMS_GENERAL, $app->getUserId()), MSZ_GENERAL_PERM_CAN_MANAGE); $tpl->var('has_manage_access', $hasManageAccess); if ($inManageMode) { diff --git a/src/Forum/forum.php b/src/Forum/forum.php index f009623c..7bf60da5 100644 --- a/src/Forum/forum.php +++ b/src/Forum/forum.php @@ -1,6 +1,8 @@ '/manage/index.php?v=overview', - 'Logs' => '/manage/index.php?v=logs', - '_', - 'Emoticons' => '/manage/index.php?v=emoticons', - 'Settings' => '/manage/index.php?v=settings', ]; - $canUsers = perms_check($userPerms, MSZ_USER_PERM_MANAGE_USERS); - $canRoles = perms_check($userPerms, MSZ_USER_PERM_MANAGE_ROLES); - $canPerms = perms_check($userPerms, MSZ_USER_PERM_MANAGE_PERMS); - $canReports = perms_check($userPerms, MSZ_USER_PERM_MANAGE_REPORTS); - $canRestricts = perms_check($userPerms, MSZ_USER_PERM_MANAGE_RESTRICTIONS); - $canBlacklists = perms_check($userPerms, MSZ_USER_PERM_MANAGE_BLACKLISTS); + if (perms_check($perms['general'], MSZ_GENERAL_PERM_VIEW_LOGS)) { + $menu['General']['Logs'] = '/manage/index.php?v=logs'; + } - if ($canUsers || $canRoles || $canPerms - || $canReports || $canRestricts || $canBlacklists) { + if (perms_check( + $perms['general'], + MSZ_GENERAL_PERM_MANAGE_EMOTICONS | MSZ_GENERAL_PERM_MANAGE_SETTINGS + )) { + $menu['General'][] = '_'; + + if (perms_check($perms['general'], MSZ_GENERAL_PERM_MANAGE_EMOTICONS)) { + $menu['General']['Emoticons'] = '/manage/users.php?v=emoticons'; + } + + if (perms_check($perms['general'], MSZ_GENERAL_PERM_MANAGE_SETTINGS)) { + $menu['General']['Settings'] = '/manage/users.php?v=settings'; + } + } + + $canUserManage = MSZ_USER_PERM_MANAGE_USERS | MSZ_USER_PERM_MANAGE_ROLES + | MSZ_USER_PERM_MANAGE_PERMS | MSZ_USER_PERM_MANAGE_REPORTS + | MSZ_USER_PERM_MANAGE_RESTRICTIONS | MSZ_USER_PERM_MANAGE_BLACKLISTS; + + if (perms_check($perms['user'], $canUserManage)) { $menu['Users'] = []; - if ($canUsers || $canPerms) { + if (perms_check($perms['user'], MSZ_USER_PERM_MANAGE_USERS | MSZ_USER_PERM_MANAGE_PERMS)) { $menu['Users']['Listing'] = '/manage/users.php?v=listing'; } - if ($canRoles || $canPerms) { + if (perms_check($perms['user'], MSZ_USER_PERM_MANAGE_ROLES | MSZ_USER_PERM_MANAGE_PERMS)) { $menu['Users']['Roles'] = '/manage/users.php?v=roles'; } - if ($canReports || $canRestricts || $canBlacklists) { + if (perms_check( + $perms['user'], + MSZ_USER_PERM_MANAGE_REPORTS | MSZ_USER_PERM_MANAGE_RESTRICTIONS | MSZ_USER_PERM_MANAGE_BLACKLISTS + )) { $menu['Users'][] = '_'; - if ($canReports) { + if (perms_check($perms['user'], MSZ_USER_PERM_MANAGE_REPORTS)) { $menu['Users']['Reports'] = '/manage/users.php?v=reports'; } - if ($canRestricts) { + if (perms_check($perms['user'], MSZ_USER_PERM_MANAGE_RESTRICTIONS)) { $menu['Users']['Restrictions'] = '/manage/users.php?v=restrictions'; } - if ($canBlacklists) { + if (perms_check($perms['user'], MSZ_USER_PERM_MANAGE_BLACKLISTS)) { $menu['Users']['Blacklisting'] = '/manage/users.php?v=blacklisting'; } } } + $canNewsManage = MSZ_NEWS_PERM_MANAGE_POSTS | MSZ_NEWS_PERM_MANAGE_CATEGORIES; + + if (perms_check($perms['news'], $canNewsManage)) { + $menu['News'] = []; + + if (perms_check($perms['news'], MSZ_NEWS_PERM_MANAGE_POSTS)) { + $menu['News']['Posts'] = '/manage/news.php?v=posts'; + } + + if (perms_check($perms['news'], MSZ_NEWS_PERM_MANAGE_CATEGORIES)) { + $menu['News']['Categories'] = '/manage/news.php?v=categories'; + } + } + + $canForumManage = MSZ_FORUM_PERM_MANAGE_FORUMS; + + if (perms_check($perms['forum'], $canForumManage)) { + $menu['Forums'] = []; + + if (perms_check($perms['forum'], MSZ_FORUM_PERM_MANAGE_FORUMS)) { + $menu['Forums']['Listing'] = '/manage/forums.php?v=listing'; + } + } + /*$menu['Forum'] = [ 'Listing' => '/manage/forums.php?v=listing', 'Permisisons' => '/manage/forums.php?v=permissions', 'Settings' => '/manage/forums.php?v=settings', ];*/ - $canChanges = perms_check($changelogPerms, MSZ_CHANGELOG_PERM_MANAGE_CHANGES); - $canChangeTags = perms_check($changelogPerms, MSZ_CHANGELOG_PERM_MANAGE_TAGS); - $canChangeActions = perms_check($changelogPerms, MSZ_CHANGELOG_PERM_MANAGE_ACTIONS); + $canChangelogManage = MSZ_CHANGELOG_PERM_MANAGE_CHANGES | MSZ_CHANGELOG_PERM_MANAGE_TAGS + | MSZ_CHANGELOG_PERM_MANAGE_ACTIONS; - if ($canChanges || $canChangeTags || $canChangeActions) { + if (perms_check($perms['changelog'], $canChangelogManage)) { $menu['Changelog'] = []; - if ($canChanges) { + if (perms_check($perms['changelog'], MSZ_CHANGELOG_PERM_MANAGE_CHANGES)) { $menu['Changelog']['Changes'] = '/manage/changelog.php?v=changes'; } - if ($canChangeTags) { + if (perms_check($perms['changelog'], MSZ_CHANGELOG_PERM_MANAGE_TAGS)) { $menu['Changelog']['Tags'] = '/manage/changelog.php?v=tags'; } - if ($canChangeActions) { + if (perms_check($perms['changelog'], MSZ_CHANGELOG_PERM_MANAGE_ACTIONS)) { $menu['Changelog']['Actions'] = '/manage/changelog.php?v=actions'; } } @@ -151,6 +190,52 @@ function manage_perms_apply(array $list, array $post): ?array function manage_perms_list(array $rawPerms): array { return [ + [ + 'section' => 'general', + 'title' => 'General', + 'perms' => [ + [ + 'section' => 'can-manage', + 'title' => 'Can access the management panel.', + 'perm' => MSZ_GENERAL_PERM_CAN_MANAGE, + 'value' => manage_perms_value( + MSZ_GENERAL_PERM_CAN_MANAGE, + $rawPerms['general_perms_allow'], + $rawPerms['general_perms_deny'] + ), + ], + [ + 'section' => 'view-logs', + 'title' => 'Can view audit logs.', + 'perm' => MSZ_GENERAL_PERM_VIEW_LOGS, + 'value' => manage_perms_value( + MSZ_GENERAL_PERM_VIEW_LOGS, + $rawPerms['general_perms_allow'], + $rawPerms['general_perms_deny'] + ) + ], + [ + 'section' => 'manage-emotes', + 'title' => 'Can manage emoticons.', + 'perm' => MSZ_GENERAL_PERM_MANAGE_EMOTICONS, + 'value' => manage_perms_value( + MSZ_GENERAL_PERM_MANAGE_EMOTICONS, + $rawPerms['general_perms_allow'], + $rawPerms['general_perms_deny'] + ) + ], + [ + 'section' => 'manage-settings', + 'title' => 'Can manage general Misuzu settings.', + 'perm' => MSZ_GENERAL_PERM_MANAGE_SETTINGS, + 'value' => manage_perms_value( + MSZ_GENERAL_PERM_MANAGE_SETTINGS, + $rawPerms['general_perms_allow'], + $rawPerms['general_perms_deny'] + ) + ], + ], + ], [ 'section' => 'user', 'title' => 'User', @@ -175,16 +260,6 @@ function manage_perms_list(array $rawPerms): array $rawPerms['user_perms_deny'] ), ], - [ - 'section' => 'can-manage', - 'title' => 'Can access the management panel.', - 'perm' => MSZ_USER_PERM_CAN_MANAGE, - 'value' => manage_perms_value( - MSZ_USER_PERM_CAN_MANAGE, - $rawPerms['user_perms_allow'], - $rawPerms['user_perms_deny'] - ), - ], [ 'section' => 'manage-users', 'title' => 'Can manage other users.', @@ -271,34 +346,86 @@ function manage_perms_list(array $rawPerms): array $rawPerms['news_perms_deny'] ), ], + ], + ], + [ + 'section' => 'forum', + 'title' => 'Forum', + 'perms' => [ [ - 'section' => 'comments-delete', - 'title' => 'Can delete comments from others.', - 'perm' => MSZ_NEWS_PERM_DELETE_COMMENTS, + 'section' => 'manage-forums', + 'title' => 'Can manage forum sections.', + 'perm' => MSZ_FORUM_PERM_MANAGE_FORUMS, 'value' => manage_perms_value( - MSZ_NEWS_PERM_DELETE_COMMENTS, - $rawPerms['news_perms_allow'], - $rawPerms['news_perms_deny'] + MSZ_FORUM_PERM_MANAGE_FORUMS, + $rawPerms['forum_perms_allow'], + $rawPerms['forum_perms_deny'] + ) + ], + ], + ], + [ + 'section' => 'comments', + 'title' => 'Comments', + 'perms' => [ + [ + 'section' => 'create', + 'title' => 'Can post comments.', + 'perm' => MSZ_COMMENTS_PERM_CREATE, + 'value' => manage_perms_value( + MSZ_COMMENTS_PERM_CREATE, + $rawPerms['comments_perms_allow'], + $rawPerms['comments_perms_deny'] ), ], [ - 'section' => 'comments-edit', - 'title' => 'Can edit comments from others.', - 'perm' => MSZ_NEWS_PERM_EDIT_COMMENTS, + 'section' => 'edit-own', + 'title' => 'Can edit own comments.', + 'perm' => MSZ_COMMENTS_PERM_EDIT_OWN, 'value' => manage_perms_value( - MSZ_NEWS_PERM_EDIT_COMMENTS, - $rawPerms['news_perms_allow'], - $rawPerms['news_perms_deny'] + MSZ_COMMENTS_PERM_EDIT_OWN, + $rawPerms['comments_perms_allow'], + $rawPerms['comments_perms_deny'] ), ], [ - 'section' => 'comments-pin', + 'section' => 'edit-any', + 'title' => 'Can edit anyone\'s comments.', + 'perm' => MSZ_COMMENTS_PERM_EDIT_ANY, + 'value' => manage_perms_value( + MSZ_COMMENTS_PERM_EDIT_ANY, + $rawPerms['comments_perms_allow'], + $rawPerms['comments_perms_deny'] + ), + ], + [ + 'section' => 'delete-own', + 'title' => 'Can delete own comments.', + 'perm' => MSZ_COMMENTS_PERM_DELETE_OWN, + 'value' => manage_perms_value( + MSZ_COMMENTS_PERM_DELETE_OWN, + $rawPerms['comments_perms_allow'], + $rawPerms['comments_perms_deny'] + ), + ], + [ + 'section' => 'delete-any', + 'title' => 'Can delete anyone\'s comments.', + 'perm' => MSZ_COMMENTS_PERM_DELETE_ANY, + 'value' => manage_perms_value( + MSZ_COMMENTS_PERM_DELETE_ANY, + $rawPerms['comments_perms_allow'], + $rawPerms['comments_perms_deny'] + ), + ], + [ + 'section' => 'pin', 'title' => 'Can pin comments.', - 'perm' => MSZ_NEWS_PERM_PIN_COMMENTS, + 'perm' => MSZ_COMMENTS_PERM_PIN, 'value' => manage_perms_value( - MSZ_NEWS_PERM_PIN_COMMENTS, - $rawPerms['news_perms_allow'], - $rawPerms['news_perms_deny'] + MSZ_COMMENTS_PERM_PIN, + $rawPerms['comments_perms_allow'], + $rawPerms['comments_perms_deny'] ), ], ], @@ -337,36 +464,6 @@ function manage_perms_list(array $rawPerms): array $rawPerms['changelog_perms_deny'] ), ], - [ - 'section' => 'comments-delete', - 'title' => 'Can delete comments from others.', - 'perm' => MSZ_CHANGELOG_PERM_DELETE_COMMENTS, - 'value' => manage_perms_value( - MSZ_CHANGELOG_PERM_DELETE_COMMENTS, - $rawPerms['changelog_perms_allow'], - $rawPerms['changelog_perms_deny'] - ), - ], - [ - 'section' => 'comments-edit', - 'title' => 'Can edit comments from others.', - 'perm' => MSZ_CHANGELOG_PERM_EDIT_COMMENTS, - 'value' => manage_perms_value( - MSZ_CHANGELOG_PERM_EDIT_COMMENTS, - $rawPerms['changelog_perms_allow'], - $rawPerms['changelog_perms_deny'] - ), - ], - [ - 'section' => 'comments-pin', - 'title' => 'Can pin comments.', - 'perm' => MSZ_CHANGELOG_PERM_PIN_COMMENTS, - 'value' => manage_perms_value( - MSZ_CHANGELOG_PERM_PIN_COMMENTS, - $rawPerms['changelog_perms_allow'], - $rawPerms['changelog_perms_deny'] - ), - ], ], ], ]; diff --git a/src/news.php b/src/news.php index a3526e43..36024451 100644 --- a/src/news.php +++ b/src/news.php @@ -1,6 +1,3 @@