Not because you didn’t have authentication, but because your user groups were chaos.
Authentication without control is an open door. Authentication user groups are the control. They decide who can touch what, and when. They are the bloodstream of secure apps, and if they’re clogged or misaligned, bad things happen fast.
The core idea is simple: users belong to groups, groups have permissions, authentication connects the two. But simplicity in theory doesn’t mean safety in practice. Poorly defined groups lead to privilege creep. Too many custom exceptions break your model. Roles that were temporary linger for years. A map of your current groups should look clean, predictable, and easy to explain in one sentence. If it doesn’t, you have a risk.
A strong authentication user group strategy starts with clear role definitions. Audit every group, remove overlap, and remove users from roles they no longer need. Use least privilege as a rule, not a suggestion. Group policies should be version-controlled, reviewed like code, and integrated into your CI/CD. Any group change should be traceable and reversible.
Granularity matters. Don’t create one giant “Admin” group for convenience. Break down responsibilities into smaller roles. Avoid assigning permissions to individual accounts directly—always through a group. The group is the unit of control; keep the unit clean.