@@ -751,7 +752,8 @@ function ensurePendingUserRoles(user) {
}
function toggleSelectedUserRole(roleId, enabled) {
- if (!selectedRbacUser()) return;
+ const user = selectedRbacUser();
+ if (!user || (rbacUserIsBuiltin(user) && roleId === 'admin' && !enabled)) return;
if (enabled) rbacState.pendingUserRoles.add(roleId);
else rbacState.pendingUserRoles.delete(roleId);
renderRbacRoles();
@@ -1232,7 +1234,11 @@ function openRbacUserModal(userId = '') {
document.getElementById('rbac-username').disabled = !!user;
document.getElementById('rbac-display-name').value = user ? (user.displayName || user.display_name || '') : '';
document.getElementById('rbac-password').value = '';
- document.getElementById('rbac-user-enabled').checked = user ? !!user.enabled : true;
+ const enabledInput = document.getElementById('rbac-user-enabled');
+ enabledInput.checked = user ? !!user.enabled : true;
+ enabledInput.disabled = rbacUserIsBuiltin(user) && enabledInput.checked;
+ enabledInput.dataset.stateDisabled = String(enabledInput.disabled);
+ enabledInput.title = enabledInput.disabled ? rbacT('rbac.protectBuiltinAdminEnabled', '内置管理员不能停用') : '';
const createRoles = document.getElementById('rbac-user-roles-create-section');
const editRoles = document.getElementById('rbac-user-roles-edit-section');
if (createRoles) createRoles.hidden = !!user;