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 ? 'ちゃん' : 'さん');