Files
UNITRONIX 45e5fda9d0 Implement RBAC v52, org scoping and assorted fixes
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.
2026-04-10 23:40:55 +02:00

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>
`
}) %>