Your IP : 216.73.217.79


Current Path : /var/git/cesa-v3/docs/specs/
Upload File :
Current File : /var/git/cesa-v3/docs/specs/echasl23-admin-login-design.md

# ECHASL23 (PHPMaker) users — design

**System:** cesa-v3  
**Requirements:** [echasl23-admin-login-requirements.md](echasl23-admin-login-requirements.md)

## Data model

| DB column | Entity property | Notes |
|-----------|-----------------|-------|
| `adminuserid` | `id` | PK |
| `adminusername` | `username` | Unique login |
| `adminpassword` | `password` | 32-char MD5 hex |
| `email` | `email_address` | |
| `level` | `access_level` | PHPMaker user level ID |
| `activated` | `activated` | Must be true to log in |
| `pwdchanged` | `pwdchanged` | Updated when password changes |
| `profile` | `profile` | Serialized PHPMaker profile (not edited in Sonata) |

Doctrine maps `App\UserBundle\Entity\UserOld` via annotation mapping under `src/UserBundle/Entity` (added to `doctrine.yaml`).

## Security

```
form_login → chain provider
  ├─ users (UserList / user_list)
  └─ echasl23_users (UserOld / echasl23, activated only)
```

- **Password hasher:** `Echasl23Md5PasswordHasher` registered for `UserOld` only; `UserList` keeps `auto`.
- **Roles:** `Echasl23UserService::resolveRoles(UserOld)` — level < 0 → super-admin role set; otherwise base staff roles including `ROLE_ADMIN` and `ROLE_SONATA_ADMIN`.

## Services

| Class | Responsibility |
|-------|----------------|
| `Echasl23UserService` | MD5 hash on save, `resolveRoles`, `applyPlainPassword`, `touchPasswordChanged` |
| `Echasl23Md5PasswordHasher` | Symfony `PasswordHasherInterface` for login |
| `Echasl23UserProvider` | Entity provider; rejects inactive users |

## Sonata

- **Admin:** `UserOldAdmin` — model `UserOld`, CRUD via default Sonata controller.
- **Hooks:** `prePersist` / `preUpdate` delegate to `Echasl23UserService` for password hashing.
- **Form:** `plainPassword` (unmapped) on entity for create/edit only.

## Tests

- `tests/Unit/UserBundle/Echasl23Md5PasswordHasherTest.php`
- `tests/Unit/UserBundle/Echasl23UserServiceTest.php`