mirror of
https://github.com/UNITRONIX/BetterDesk.git
synced 2026-09-10 09:35:39 +00:00
a710580b7a
Implement RBAC Phase 52: add server-side role & permission handlers and wire API routes, plus frontend UI, styles and translations. Server: new role_handlers.go exposing endpoints to list roles, get effective role permissions, list/set/delete role permission overrides; routes registered in server.go with permission checks (PermUserView / PermServerConfig). Protects super-admin defaults and validates inputs. Frontend (management & web UI): add permissions page assets (CSS, JS, view), add i18n strings for en/pl/zh, update sidebar to filter items by canView, show user role badge in topbar and empty access-denied state when no permission. Add role badges styling in users.css and small UX/i18n improvements in organizationDetail.js. Also several route and service adjustments to support the new permissions UI. This change introduces RBAC UI/API plumbing for managing role-based permissions and overrides.
86 lines
3.5 KiB
HTML
86 lines
3.5 KiB
HTML
<%- include('layouts/main', {
|
|
title: _('permissions.title'),
|
|
pageStyles: ['permissions'],
|
|
pageScripts: ['permissions'],
|
|
currentPage: 'permissions',
|
|
breadcrumb: [{ label: _('permissions.title') }],
|
|
body: `
|
|
<div class="permissions-page">
|
|
<!-- Header -->
|
|
<div class="page-header">
|
|
<div class="page-title">
|
|
<h1>${_('permissions.title')}</h1>
|
|
</div>
|
|
<p class="page-subtitle">${_('permissions.subtitle')}</p>
|
|
</div>
|
|
|
|
<!-- Info Card -->
|
|
<div class="permissions-info-card">
|
|
<span class="material-icons">info</span>
|
|
<div class="info-content">
|
|
<strong>${_('permissions.info_title')}</strong>
|
|
<p>${_('permissions.info_desc')}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Role Selector -->
|
|
<div class="permissions-toolbar">
|
|
<div class="toolbar-left">
|
|
<div class="role-selector">
|
|
<label>${_('permissions.select_role')}</label>
|
|
<select id="role-select">
|
|
<option value="" disabled selected>${_('permissions.select_role_placeholder')}</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="toolbar-right">
|
|
<button class="btn btn-secondary" id="btn-reset-overrides" disabled>
|
|
<span class="material-icons">restart_alt</span>
|
|
${_('permissions.reset_overrides')}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Role Info Banner -->
|
|
<div class="role-info-banner hidden" id="role-info-banner">
|
|
<div class="role-info-left">
|
|
<span class="material-icons role-info-icon" id="role-info-icon">shield</span>
|
|
<div>
|
|
<div class="role-info-name" id="role-info-name"></div>
|
|
<div class="role-info-level" id="role-info-level"></div>
|
|
</div>
|
|
</div>
|
|
<div class="role-info-right">
|
|
<div class="role-info-stat">
|
|
<span class="stat-num" id="role-perm-count">0</span>
|
|
<span class="stat-label">${_('permissions.granted')}</span>
|
|
</div>
|
|
<div class="role-info-stat">
|
|
<span class="stat-num" id="role-override-count">0</span>
|
|
<span class="stat-label">${_('permissions.overrides')}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Permissions Matrix -->
|
|
<div class="permissions-matrix hidden" id="permissions-matrix">
|
|
<!-- Categories rendered by JS -->
|
|
</div>
|
|
|
|
<!-- Empty State -->
|
|
<div class="permissions-empty" id="permissions-empty">
|
|
<span class="material-icons">admin_panel_settings</span>
|
|
<h3>${_('permissions.empty_title')}</h3>
|
|
<p>${_('permissions.empty_desc')}</p>
|
|
</div>
|
|
|
|
<!-- Super Admin Notice -->
|
|
<div class="permissions-locked hidden" id="permissions-locked">
|
|
<span class="material-icons">lock</span>
|
|
<h3>${_('permissions.locked_title')}</h3>
|
|
<p>${_('permissions.locked_desc')}</p>
|
|
</div>
|
|
</div>
|
|
`
|
|
}) %>
|