mirror of
https://github.com/UNITRONIX/BetterDesk.git
synced 2026-09-10 17:45:42 +00:00
45e5fda9d0
Adds a full Phase-52 RBAC implementation and multiple server/frontend fixes. Key changes: new auth/permissions.go with 28 granular permissions and DefaultRolePermissions, expanded 7-role hierarchy and helpers in auth/roles.go, JWT org context and GenerateOrgToken, requirePermission/requireOrgMembership middlewares (Go + Node.js), DB schema & adapter changes for role_permissions and is_server_admin, org role boundary checks and peer org scoping, and guards for last-admin demotion and self-demotion. Also: TCP EOF/connection-reset log filtering in signal/relay servers, improved startup banner port display, KEYS_PATH auto-detect warning, CSS hover/transition layout fixes, admin password race mitigation, ID-change ghost peer cleanup, added Tauri ACL schema files, and a new RBAC_PHASE52.md doc. Misc: numerous web-nodejs i18n, CSS, JS and route updates and an updated .github/copilot-instructions.md timestamp/summary.
37 lines
1.6 KiB
HTML
37 lines
1.6 KiB
HTML
<%- include('layouts/main', {
|
|
title: typeof title !== 'undefined' ? title : 'Languages',
|
|
pageStyles: typeof pageStyles !== 'undefined' ? pageStyles : ['languages'],
|
|
pageScripts: typeof pageScripts !== 'undefined' ? pageScripts : ['languages'],
|
|
currentPage: typeof currentPage !== 'undefined' ? currentPage : 'languages',
|
|
breadcrumb: typeof breadcrumb !== 'undefined' ? breadcrumb : [{ label: 'Languages' }],
|
|
body: `
|
|
<div class="page-content" style="max-width: 1400px; margin: 0 auto;">
|
|
<div class="lang-header">
|
|
<h2>${_('languages.title')}</h2>
|
|
</div>
|
|
|
|
<div class="lang-stats-row" id="lang-stats"></div>
|
|
|
|
<div class="lang-grid" id="lang-grid">
|
|
<div style="grid-column:1/-1; text-align:center; padding:40px; color:var(--text-secondary);">
|
|
<span class="material-icons-round" style="font-size:32px; opacity:0.4;">hourglass_empty</span>
|
|
<p>${_('common.loading')}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Detail overlay -->
|
|
<div class="lang-detail-overlay" id="lang-detail-overlay" onclick="if(event.target===this) Languages.closeDetail()">
|
|
<div class="lang-detail-panel">
|
|
<div class="lang-detail-header">
|
|
<span></span>
|
|
<button class="lang-detail-close" onclick="Languages.closeDetail()">
|
|
<span class="material-icons-round">close</span>
|
|
</button>
|
|
</div>
|
|
<div id="lang-detail-content"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`
|
|
}) %>
|