Roles stage 1: Admin > Roles rebuilt showing each role's access per module as level-colored pills or Admin - everything, its agents with a link to Users filtered by role, search, Current and Archived tabs, and Edit, Copy, Archive, Restore and Delete greyed out with the reason when blocked; one role window for New, Edit and Copy with an Admin switch and a None, Read, Modify or Full level per module, each level listing what it allows, Reports limited to None and Read, and a copy dropping the Built-in description prefix; hardcoded role 3 checks replaced by guards so admin can't be taken off your own role or the only admins' role, archive needs no active agents, delete needs no agents at all, and names are unique in any case with the description optional; Administrator role can now be opened and renamed; role names escaped in flash messages, fixing an XSS; audit log records what changed on a role; lookupUserPermission reads the role's levels once per request instead of one query per check; new functions/roles.php, shared role_form.php and js/role_form.js; database 3.1.6 removes orphaned and duplicate user_role_permissions rows, clamps levels to 3 and adds a primary key on role and module; changelog updated

This commit is contained in:
johnnyq
2026-10-17 20:43:45 -04:00
parent bf89a86ab1
commit 5e87f6fa25
13 changed files with 798 additions and 571 deletions

View File

@@ -3083,6 +3083,21 @@ a.itflow-dash-rail-item:focus-visible {
.itflow-category .itflow-category-dot {
margin-right: 0;
}
/* Admin > Roles - a role's agents as overlapping faces, and in the role
window what a level lets them do, the lines it doesn't greyed out */
.itflow-role-agents {
display: inline-flex;
}
.itflow-role-agents > .itflow-contact-avatar + .itflow-contact-avatar {
margin-left: -.5rem;
}
.itflow-role-agents > .itflow-contact-avatar {
box-shadow: 0 0 0 2px var(--bs-body-bg);
}
.itflow-role-level-list li.is-off {
color: var(--bs-secondary-color);
opacity: .7;
}
/* A category's icon beside its name in a list (categoryMarkHtml()) - in its
colour, set as the dot it stands in for is */
.itflow-category-icon {