ロール

諏訪子 <suwako@076.moe>、2025-12-29 16:25
コミット 863bdabf591ecf09101aabd8c54e33969e693a24 ・親 8c76fe2 ・ファイルを見る

6個のファイル、+99 -13

変更 route.php
@@ -1,6 +1,6 @@
11 <?php
2-/* error_reporting(E_ALL); */
3-/* ini_set('display_errors', 1); */
2+error_reporting(E_ALL);
3+ini_set('display_errors', 1);
44
55 require_once __DIR__.DIRECTORY_SEPARATOR.'/autoload.php';
66
@@ -45,6 +45,9 @@
4545 }
4646 $routes[] = Route::add('GET', 'logout', User::class.'@logout');
4747 $routes[] = Route::add('GET', 'profile/{name}', User::class.'@profile');
48+
49+ $routes[] = Route::add('GET', 'memberonly', Page::class.'@memberonly');
50+ $routes[] = Route::add('GET', 'staffonly', Page::class.'@staffonly');
4851 }
4952
5053 /* if (RSS_ENABLED) {} */
@@ -10,8 +10,8 @@
1010 public function getPosts(string $section, ?\stdClass $user): array {
1111 $path = ROOT.$section;
1212 $posts = [];
13- $isMember = $user !== NULL;
14- $isStaff = $user !== NULL && $user->role === 1;
13+ $isMember = $user !== NULL && $user->role !== \Roles::BANNED;
14+ $isStaff = $user !== NULL && $user->role & (\Roles::ADMIN | \Roles::STAFF);
1515
1616 if (!is_dir($path)) return $posts;
1717 $files = glob($path.'/*.md');
@@ -113,8 +113,8 @@
113113 // ユーザー
114114 $auth = new Auth();
115115 $user = $auth->getLoggedInUser();
116- $isMember = $user !== NULL;
117- $isStaff = $user !== NULL && $user->role === 1;
116+ $isMember = $user !== NULL && $user->role !== \Roles::BANNED;
117+ $isStaff = $user !== NULL && $user->role & (\Roles::ADMIN | \Roles::STAFF);
118118 $tmpl->assign('user', $user);
119119
120120 $tmpl->assign('pagetit', $pagetit);
@@ -96,7 +96,7 @@
9696 $tmpl->assign('menu', $this->getMenu());
9797 $tmpl->assign('description', $description);
9898
99- if ($user && $user->role != -1) $tmpl->render('memberonly');
99+ if ($user && $user->role !== \Roles::BANNED) $tmpl->render('memberonly');
100100 else $tmpl->render('nopermission');
101101 } catch (\Exception $e) {
102102 throw new \Exception($e->getMessage());
@@ -121,7 +121,7 @@
121121 $tmpl->assign('menu', $this->getMenu());
122122 $tmpl->assign('description', $description);
123123
124- if ($user && $user->role == 1) $tmpl->render('staffonly');
124+ if ($user && $user->role & (\Roles::ADMIN | \Roles::STAFF)) $tmpl->render('staffonly');
125125 else $tmpl->render('nopermission');
126126 } catch (\Exception $e) {
127127 throw new \Exception($e->getMessage());
@@ -40,13 +40,13 @@
4040 unset($user->password);
4141 unset($user->tokens);
4242 $myself = $this->getUserData();
43- if ($myself->role === 1) {
43+ if ($myself->role & (\Roles::PLAYSTATIONNDA | \Roles::NINTENDONDA | \Roles::MEMBER | \Roles::BANNED)) {
4444 unset($user->email);
4545 }
4646 $user->name = namecolor($user);
4747 $user->regDate = date('Y年m月d日', $user->regDate);
4848 $user->gender = $user->gender === 0 ? '男' : ($user->gender === 1 ? '女' : '不明');
49- $user->role = $user->role === 1 ? '管理者' : ($user->role === -1 ? 'BANされた' : 'ユーザー');
49+ $user->role = $user->role & (\Roles::ADMIN | \Roles::STAFF) ? '管理者' : ($user->role === \Roles::BANNED ? 'BANされた' : 'ユーザー');
5050 $user->avatar = '/static/user/'.($user->avatar === '' ? 'noicon.png' : $user->username.'/'.$user->avatar);
5151 $user->altName = $user->displayname ?: $user->username;
5252 unset($user->username);
@@ -199,7 +199,7 @@
199199 $user->namecolor = '';
200200 $user->displayname = '';
201201 $user->gender = -1;
202- $user->role = 0;
202+ $user->role = \Roles::MEMBER;
203203 $user->tokens = [];
204204
205205 $path = "{$this->dataDir}{$lastId}.{$username}.json";
変更 util.php
@@ -27,6 +27,89 @@
2727 }
2828 }
2929
30+class Roles {
31+ // 例: if ($user->role & (Roles::STAFF | Roles::NINTENDONDA))
32+ public const int BANNED = 0;
33+ public const int MEMBER = 1 << 0; // 1
34+ public const int NINTENDONDA = 1 << 1; // 2
35+ public const int PLAYSTATIONNDA = 1 << 2; // 4
36+ public const int STAFF = 1 << 3; // 8
37+ public const int ADMIN = 1 << 7; // 128
38+}
39+
40+$colorPalette = [
41+ 'ultradark' => [
42+ 'black' => '#020102',
43+ 'white' => '#b3b1b3',
44+ 'grey' => '#5c535c',
45+ 'yellow' => '#8d8b0d',
46+ 'orange' => '#724e0b',
47+ 'green' => '#1e6907',
48+ 'purple' => '#410a5a',
49+ 'lime' => '#198d5b',
50+ 'pink' => '#9e0ea3',
51+ 'cyan' => '#1e8c9b',
52+ 'red' => '#861623',
53+ 'blue' => '#164a85',
54+ ],
55+ 'dark' => [
56+ 'black' => '#120f12',
57+ 'white' => '#cfcbcf',
58+ 'grey' => '#746c75',
59+ 'yellow' => '#b8b515',
60+ 'orange' => '#ac7718',
61+ 'green' => '#2c980c',
62+ 'purple' => '#550f75',
63+ 'lime' => '#10c074',
64+ 'pink' => '#c016c6',
65+ 'cyan' => '#1cbcd0',
66+ 'red' => '#bc1729',
67+ 'blue' => '#1a6ecf',
68+ ],
69+ 'medium' => [
70+ 'black' => '#232023',
71+ 'white' => '#f6f6f6',
72+ 'grey' => '#988f98',
73+ 'yellow' => '#f1ed25',
74+ 'orange' => '#f7a717',
75+ 'green' => '#2de12c',
76+ 'purple' => '#b421f8',
77+ 'lime' => '#20f398',
78+ 'pink' => '#f545f5',
79+ 'cyan' => '#29d3ff',
80+ 'red' => '#ee4030',
81+ 'blue' => '#2687f7',
82+ ],
83+ 'light' => [
84+ 'black' => '#443b44',
85+ 'white' => '#fcfcfc',
86+ 'grey' => '#bdb4bd',
87+ 'yellow' => '#ecea71',
88+ 'orange' => '#f8c56a',
89+ 'green' => '#6cf344',
90+ 'purple' => '#ae6bdb',
91+ 'lime' => '#88ecc1',
92+ 'pink' => '#ea79d8',
93+ 'cyan' => '#8ae5ff',
94+ 'red' => '#f35869',
95+ 'blue' => '#6aa6eb',
96+ ],
97+ 'ultralight' => [
98+ 'black' => '#574d57',
99+ 'white' => '#ffffff',
100+ 'grey' => '#d6cfd6',
101+ 'yellow' => '#f5f4cf',
102+ 'orange' => '#f3d6a3',
103+ 'green' => '#baf3a8',
104+ 'purple' => '#d2bae2',
105+ 'lime' => '#b6e9d3',
106+ 'pink' => '#e6b9de',
107+ 'cyan' => '#c2e8f3',
108+ 'red' => '#ecb0b7',
109+ 'blue' => '#bbd4f0',
110+ ],
111+];
112+
30113 function uuid(): string {
31114 $data = random_bytes(16);
32115 $data[6] = chr(ord($data[6]) & 0x0f | 0x40);
@@ -214,12 +297,12 @@
214297 $ungender = "#7C60B0";
215298
216299 $gender = 'color: '.($userData->gender === 0 ? $male : ($userData->gender === 1 ? $female : $ungender)).';';
217- $style = $userData->namecolor ?: ($userData->role >= 0 ? $gender : $ban);
300+ $style = $userData->namecolor ?: ($userData->role !== Roles::BANNED ? $gender : 'color: '.$ban.';');
218301
219302 $showname = $userData->displayname ?: $userData->username;
220303
221304 $color = "<span style=\"{$style}\">{$showname}</span>";
222- if ($userData->role === 1) $color .= "<span style=\"font-size: x-small; background: #10c074; border: 1px solid #fcfcfc; border-radius: 10px; padding: 0 0.5em;\">✓</span>";
305+ if ($userData->role & (Roles::ADMIN | Roles::STAFF)) $color .= "<span style=\"font-size: x-small; background: #10c074; border: 1px solid #fcfcfc; border-radius: 10px; padding: 0 0.5em;\">✓</span>";
223306
224307 $suffix = $userData->gender === 0 ? 'くん' : ($userData->gender === 1 ? 'ちゃん' : 'さん');
225308