From 863bdabf591ecf09101aabd8c54e33969e693a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Mon, 29 Dec 2025 16:25:29 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- route.php | 7 ++- src/Site/Controller/BlogPost.php | 4 +- src/Site/Controller/Home.php | 4 +- src/Site/Controller/Page.php | 4 +- src/Site/Lib/Auth.php | 6 +-- util.php | 87 +++++++++++++++++++++++++++++++- 6 files changed, 99 insertions(+), 13 deletions(-) diff --git a/route.php b/route.php index 435cd3c..2d5d4ff 100644 --- a/route.php +++ b/route.php @@ -1,6 +1,6 @@ role === 1; + $isMember = $user !== NULL && $user->role !== \Roles::BANNED; + $isStaff = $user !== NULL && $user->role & (\Roles::ADMIN | \Roles::STAFF); if (!is_dir($path)) return $posts; $files = glob($path.'/*.md'); diff --git a/src/Site/Controller/Home.php b/src/Site/Controller/Home.php index 516ecd3..2537f54 100644 --- a/src/Site/Controller/Home.php +++ b/src/Site/Controller/Home.php @@ -113,8 +113,8 @@ class Home extends BlogPost { // ユーザー $auth = new Auth(); $user = $auth->getLoggedInUser(); - $isMember = $user !== NULL; - $isStaff = $user !== NULL && $user->role === 1; + $isMember = $user !== NULL && $user->role !== \Roles::BANNED; + $isStaff = $user !== NULL && $user->role & (\Roles::ADMIN | \Roles::STAFF); $tmpl->assign('user', $user); $tmpl->assign('pagetit', $pagetit); diff --git a/src/Site/Controller/Page.php b/src/Site/Controller/Page.php index c981eb0..7d920ec 100644 --- a/src/Site/Controller/Page.php +++ b/src/Site/Controller/Page.php @@ -96,7 +96,7 @@ class Page { $tmpl->assign('menu', $this->getMenu()); $tmpl->assign('description', $description); - if ($user && $user->role != -1) $tmpl->render('memberonly'); + if ($user && $user->role !== \Roles::BANNED) $tmpl->render('memberonly'); else $tmpl->render('nopermission'); } catch (\Exception $e) { throw new \Exception($e->getMessage()); @@ -121,7 +121,7 @@ class Page { $tmpl->assign('menu', $this->getMenu()); $tmpl->assign('description', $description); - if ($user && $user->role == 1) $tmpl->render('staffonly'); + if ($user && $user->role & (\Roles::ADMIN | \Roles::STAFF)) $tmpl->render('staffonly'); else $tmpl->render('nopermission'); } catch (\Exception $e) { throw new \Exception($e->getMessage()); diff --git a/src/Site/Lib/Auth.php b/src/Site/Lib/Auth.php index 5bf26e9..8e3f5ec 100644 --- a/src/Site/Lib/Auth.php +++ b/src/Site/Lib/Auth.php @@ -40,13 +40,13 @@ class Auth { unset($user->password); unset($user->tokens); $myself = $this->getUserData(); - if ($myself->role === 1) { + if ($myself->role & (\Roles::PLAYSTATIONNDA | \Roles::NINTENDONDA | \Roles::MEMBER | \Roles::BANNED)) { unset($user->email); } $user->name = namecolor($user); $user->regDate = date('Y年m月d日', $user->regDate); $user->gender = $user->gender === 0 ? '男' : ($user->gender === 1 ? '女' : '不明'); - $user->role = $user->role === 1 ? '管理者' : ($user->role === -1 ? 'BANされた' : 'ユーザー'); + $user->role = $user->role & (\Roles::ADMIN | \Roles::STAFF) ? '管理者' : ($user->role === \Roles::BANNED ? 'BANされた' : 'ユーザー'); $user->avatar = '/static/user/'.($user->avatar === '' ? 'noicon.png' : $user->username.'/'.$user->avatar); $user->altName = $user->displayname ?: $user->username; unset($user->username); @@ -199,7 +199,7 @@ class Auth { $user->namecolor = ''; $user->displayname = ''; $user->gender = -1; - $user->role = 0; + $user->role = \Roles::MEMBER; $user->tokens = []; $path = "{$this->dataDir}{$lastId}.{$username}.json"; diff --git a/util.php b/util.php index 35e2ccb..93cf04b 100644 --- a/util.php +++ b/util.php @@ -27,6 +27,89 @@ class Result { } } +class Roles { + // 例: if ($user->role & (Roles::STAFF | Roles::NINTENDONDA)) + public const int BANNED = 0; + public const int MEMBER = 1 << 0; // 1 + public const int NINTENDONDA = 1 << 1; // 2 + public const int PLAYSTATIONNDA = 1 << 2; // 4 + public const int STAFF = 1 << 3; // 8 + public const int ADMIN = 1 << 7; // 128 +} + +$colorPalette = [ + 'ultradark' => [ + 'black' => '#020102', + 'white' => '#b3b1b3', + 'grey' => '#5c535c', + 'yellow' => '#8d8b0d', + 'orange' => '#724e0b', + 'green' => '#1e6907', + 'purple' => '#410a5a', + 'lime' => '#198d5b', + 'pink' => '#9e0ea3', + 'cyan' => '#1e8c9b', + 'red' => '#861623', + 'blue' => '#164a85', + ], + 'dark' => [ + 'black' => '#120f12', + 'white' => '#cfcbcf', + 'grey' => '#746c75', + 'yellow' => '#b8b515', + 'orange' => '#ac7718', + 'green' => '#2c980c', + 'purple' => '#550f75', + 'lime' => '#10c074', + 'pink' => '#c016c6', + 'cyan' => '#1cbcd0', + 'red' => '#bc1729', + 'blue' => '#1a6ecf', + ], + 'medium' => [ + 'black' => '#232023', + 'white' => '#f6f6f6', + 'grey' => '#988f98', + 'yellow' => '#f1ed25', + 'orange' => '#f7a717', + 'green' => '#2de12c', + 'purple' => '#b421f8', + 'lime' => '#20f398', + 'pink' => '#f545f5', + 'cyan' => '#29d3ff', + 'red' => '#ee4030', + 'blue' => '#2687f7', + ], + 'light' => [ + 'black' => '#443b44', + 'white' => '#fcfcfc', + 'grey' => '#bdb4bd', + 'yellow' => '#ecea71', + 'orange' => '#f8c56a', + 'green' => '#6cf344', + 'purple' => '#ae6bdb', + 'lime' => '#88ecc1', + 'pink' => '#ea79d8', + 'cyan' => '#8ae5ff', + 'red' => '#f35869', + 'blue' => '#6aa6eb', + ], + 'ultralight' => [ + 'black' => '#574d57', + 'white' => '#ffffff', + 'grey' => '#d6cfd6', + 'yellow' => '#f5f4cf', + 'orange' => '#f3d6a3', + 'green' => '#baf3a8', + 'purple' => '#d2bae2', + 'lime' => '#b6e9d3', + 'pink' => '#e6b9de', + 'cyan' => '#c2e8f3', + 'red' => '#ecb0b7', + 'blue' => '#bbd4f0', + ], +]; + function uuid(): string { $data = random_bytes(16); $data[6] = chr(ord($data[6]) & 0x0f | 0x40); @@ -214,12 +297,12 @@ function namecolor(\stdClass $userData): string { $ungender = "#7C60B0"; $gender = 'color: '.($userData->gender === 0 ? $male : ($userData->gender === 1 ? $female : $ungender)).';'; - $style = $userData->namecolor ?: ($userData->role >= 0 ? $gender : $ban); + $style = $userData->namecolor ?: ($userData->role !== Roles::BANNED ? $gender : 'color: '.$ban.';'); $showname = $userData->displayname ?: $userData->username; $color = "{$showname}"; - if ($userData->role === 1) $color .= ""; + if ($userData->role & (Roles::ADMIN | Roles::STAFF)) $color .= ""; $suffix = $userData->gender === 0 ? 'くん' : ($userData->gender === 1 ? 'ちゃん' : 'さん');