enabel/user-bundle
Deprecated Symfony bundle for user management with login and SSO Azure forms, commands to generate, promote and demote users, and an EasyAdmin interface for managing users. Works with Symfony 6.0+.
{Minimal steps, where to look first, first use case}
Before doing anything else, read the deprecation notice at the top of the README: this package is unmaintained and the maintainers point you at knpuniversity/oauth2-client-bundle or HWIOAuthBundle instead. That single fact changes the assessment — you are evaluating this as a source of patterns and as a reference implementation, not as a dependency you want to install long-term.
First look at, in order:
docs/index.md — the only real usage documentation.CHANGELOG.md and the GitHub releases page — tells you how active it was before being abandoned.src/ — especially the Command/, Form/, and EasyAdmin CRUD classes; these are the parts that carry the most portable knowledge.If you are in a legacy Symfony 6 app (the only context where direct adoption makes sense):
composer require enabel/user-bundle
# register Enabel\UserBundle\EnabelUserBundle in config/bundles.php
bin/console doctrine:migrations:diff && bin/console doctrine:migrations:migrate
bin/console enabel:user:create # or whatever the generator command is named in docs/
Then wire your security.yaml to the bundle's User entity and login form, and add the EasyAdmin dashboard entry for the CRUD controller.
If you are a Laravel developer, the honest first step is to read the bundle as a spec and not install it. The closest Laravel equivalent stack is laravel/breeze or laravel/fortify for auth, laravel/socialite for Azure SSO, and Filament or Nova for the admin CRUD. The first real use case to validate is "I need an admin-managed user table with role promotion/demotion plus Azure login" — that is what this bundle solves, and you can reproduce it in Laravel in a day or two.
{Usage patterns, workflows, integration tips}
The three patterns worth copying regardless of framework:
generate, promote, and demote commands are the cleanest part of it. Port the pattern to Laravel as php artisan user:create, user:promote {email} {role}, user:demote {email} {role}. Wrap the role mutation in a transaction and log it.UserResource maps to this almost one-to-one, including the role field being a multi-select.Workflow integration tips:
User entity (or Eloquent model) as the single source of truth; layer roles as a separate table or JSON column rather than editing the bundle/model directly.composer.lock, and add a composer audit gate to CI, because you will not get upstream security fixes.Porting checklist for a Laravel rewrite: provider → Socialite driver, login form → Breeze route, EasyAdmin CRUD → Filament resource, console commands → artisan commands, role hierarchy → Gate/policies.
{Pitfalls, debugging, config quirks, extension points}
Bundle registration in config/bundles.php, and Symfony's security firewall. Composer may resolve it, but nothing will work as expected. Read it, don't require it.composer.json. Check the exact constraints before assuming compatibility with your app.security.yaml under anonymous: true or you'll get a redirect loop.User entity and mapping. If your app already has a users table, you'll get schema conflicts. Configure the table name and inheritance before running doctrine:migrations:diff, not after.security.yaml role_hierarchy. A typo silently grants nothing.bin/console debug:router | grep -i login, bin/console debug:container --tag=security.user_provider, and the profiler's security panel will resolve 90% of wiring problems.templates/bundles/EnabelUserBundle/, extend the User entity via Doctrine inheritance, and hook user creation with an event subscriber rather than forking the commands.knpuniversity/oauth2-client-bundle for the SSO and write your own thin user admin. The bundle's value is as a working reference, and that value does not decay with the deprecation notice.How can I help you explore Laravel packages today?