A department head needs to grant a new administrative staffer access to one of the thirty-odd internal apps that the College of Human Ecology and the Brooks School of Public Policy share. Doing that meant filing a ticket, waiting for a developer to remote in and edit the access by hand inside an outdated ColdFusion system, then email back to confirm. Multiple business days, every time, for a single line of permission.
The ColdFusion service was deprecated enough that nobody had reason to work in it, and an access audit meant hours of assembling answers by hand. Licensing an identity product and integrating it came to about what building one would, and those are sized for enterprises rather than for thirty apps and two colleges' worth of staff. Additionally, the permission data already sat in SQL tables every internal app could read, and as such the broken part was only the procedure for changing a row.
Now a department head searches a username, drags it onto a role to grant access, and drags it onto the trash to revoke. Underneath that board is a Node and Express service writing to the same SQL tables, with sign-on left to Shibboleth at the web-server layer, which every application on campus already sits behind. Nobody files a ticket, no developer touches a row, and granting takes under a minute.
The board
Because removals are soft deletes, the permission table keeps every grant and every revocation with who and when, and the last access audit was answered with a query instead of an afternoon.
The colleges have been moving their internal apps to Node, and this became the access control the new ones use. Two years on they ask the same tables "can this person see this?", and in that time nothing has been granted or revoked in error and nobody has reached what they should not.