Add Banned role

This commit is contained in:
2026-01-14 22:13:07 +06:00
parent 011996d78d
commit 1eaba59f0f
7 changed files with 249 additions and 9 deletions

View File

@@ -99,6 +99,19 @@ function App() {
localStorage.setItem('theme', newTheme);
};
const getRoleName = (role) => {
switch (role) {
case 'admin':
return 'Админ';
case 'support':
return 'Поддержка';
case 'banned':
return 'Забанен';
default:
return 'Пользователь';
}
};
const handleUsernameChange = (newToken, newUsername) => {
setToken(newToken);
setUser({ ...user, username: newUsername });
@@ -166,7 +179,7 @@ function App() {
{user?.username}
</span>
<span className={`ml-2 text-xs px-2 py-0.5 rounded ${currentTheme.accent} text-white`}>
{user?.role === 'admin' ? 'Админ' : user?.role === 'support' ? 'Поддержка' : 'Пользователь'}
{getRoleName(user?.role)}
</span>
</div>
<ThemeSelector currentTheme={theme} onThemeChange={handleThemeChange} />
@@ -216,7 +229,7 @@ function App() {
{user?.username}
</span>
<span className={`ml-2 text-xs px-2 py-0.5 rounded ${currentTheme.accent} text-white`}>
{user?.role === 'admin' ? 'Админ' : user?.role === 'support' ? 'Поддержка' : 'Пользователь'}
{getRoleName(user?.role)}
</span>
</div>
<ThemeSelector currentTheme={theme} onThemeChange={handleThemeChange} />
@@ -266,7 +279,7 @@ function App() {
{user?.username}
</span>
<span className={`ml-2 text-xs px-2 py-0.5 rounded ${currentTheme.accent} text-white`}>
{user?.role === 'admin' ? 'Админ' : user?.role === 'support' ? 'Поддержка' : 'Пользователь'}
{getRoleName(user?.role)}
</span>
</div>
<ThemeSelector currentTheme={theme} onThemeChange={handleThemeChange} />
@@ -327,7 +340,7 @@ function App() {
{user?.username}
</span>
<span className={`ml-2 text-xs px-2 py-0.5 rounded ${currentTheme.accent} text-white`}>
{user?.role === 'admin' ? 'Админ' : user?.role === 'support' ? 'Поддержка' : 'Пользователь'}
{getRoleName(user?.role)}
</span>
</div>
<ThemeSelector currentTheme={theme} onThemeChange={handleThemeChange} />

View File

@@ -121,6 +121,8 @@ export default function Profile({ token, user, theme, onUsernameChange }) {
return 'Администратор';
case 'support':
return 'Тех. поддержка';
case 'banned':
return 'Забанен';
default:
return 'Пользователь';
}
@@ -132,6 +134,8 @@ export default function Profile({ token, user, theme, onUsernameChange }) {
return 'bg-blue-500/20 text-blue-500 border-blue-500/50';
case 'support':
return 'bg-purple-500/20 text-purple-500 border-purple-500/50';
case 'banned':
return 'bg-red-500/20 text-red-500 border-red-500/50';
default:
return 'bg-gray-500/20 text-gray-500 border-gray-500/50';
}
@@ -280,6 +284,7 @@ export default function Profile({ token, user, theme, onUsernameChange }) {
{stats?.role === 'admin' && 'Полный доступ ко всем функциям панели'}
{stats?.role === 'support' && 'Доступ к системе тикетов и поддержке'}
{stats?.role === 'user' && 'Доступ к своим серверам и тикетам'}
{stats?.role === 'banned' && '⛔ Аккаунт заблокирован, доступ запрещён'}
</div>
</div>
</div>

View File

@@ -102,7 +102,7 @@ export default function Users({ token }) {
<div className="flex items-center justify-between mb-4">
<div className="flex items-center gap-3">
<div className={`p-2 rounded ${
user.role === 'admin' ? 'bg-blue-600' : user.role === 'support' ? 'bg-purple-600' : 'bg-gray-700'
user.role === 'admin' ? 'bg-blue-600' : user.role === 'support' ? 'bg-purple-600' : user.role === 'banned' ? 'bg-red-600' : 'bg-gray-700'
}`}>
{user.role === 'admin' ? (
<Shield className="w-6 h-6" />
@@ -113,7 +113,7 @@ export default function Users({ token }) {
<div>
<h3 className="text-lg font-semibold">{user.username}</h3>
<p className="text-sm text-gray-400">
{user.role === 'admin' ? 'Администратор' : user.role === 'support' ? 'Тех. поддержка' : 'Пользователь'}
{user.role === 'admin' ? 'Администратор' : user.role === 'support' ? 'Тех. поддержка' : user.role === 'banned' ? 'Забанен' : 'Пользователь'}
</p>
</div>
</div>
@@ -127,6 +127,7 @@ export default function Users({ token }) {
<option value="user">Пользователь</option>
<option value="support">Тех. поддержка</option>
<option value="admin">Администратор</option>
<option value="banned">Забанен</option>
</select>
<button
onClick={() => deleteUser(user.username)}
@@ -178,6 +179,12 @@ export default function Users({ token }) {
Тех. поддержка имеет доступ к системе тикетов
</p>
)}
{user.role === 'banned' && (
<p className="text-sm text-red-400">
Пользователь заблокирован и не имеет доступа к панели
</p>
)}
</div>
))}
</div>