Bonjour,

J'ai une question toute bête qui vient me piquer à chaque fois.

Je développe en PHP, j'ai implémenté certaines couches autour du MVC (à partir du framework Zend) et plus précisément autour du Model.

Pour mon projet actuel (d'envergure moyenne, ok ça ne veut rien dire :p), j'ai donc une archi du type :
front (view/controllers) > Services > Repository > DB

Comme mon métier est simple (aucun traitement complexe, que de la donnée), et que les POJOs font la plupart du temps l'affaire, j'ai décidé de me contenter d'une seule couche qui réunit un peu façade et service layer. J'ai également décidé de ne pas utiliser de DTOs et simplement de convertir les objets en array avant de les passer aux vues pour les décrocher de mon ORM.

Pour gérer mes autorisations et authentification, j'ai décidé d'implémenter un service particulier qui gère à la fois l'authentification et les acl. Ce qui me permet d'avoir une api "acl-aware" en vue de la mise en place éventuelle de web services.

Voici un extrait du contrat de mon service :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
interface Service_Auth {      
    /**     
     * @param string $login
     * @param string $password
     * @return boolean     
     */
    public function authenticate($login, $password);
    
    /**
     * @return boolean     
     */
    public function clearAuthentification();
        
    /**     
     * @return Model_User
     */
    public function getCurrentUser($defaultRole = 'guest');
    
    /**     
     * @param Zend_Acl_Role_Interface|string     $role
     * @param Zend_Acl_Resource_Interface|string $resource
     * @param string                             $privilege
     * @return boolean
     */
    public function isAllowed($role = null, $resource = null, $privilege = null);
    
    /**     
     * @return Zend_Acl
     */
    public function getAcl();
}
Ok, mais où je veux en venir ? Voici ma question : (:p)

Quand je veux ajouter une ressource à un utilisateur. Admettons par exemple qu'un user possède des albums photos, comment utiliser les paramètres de la méthode "createAlbum" du service AlbumService ? (appel de la méthode depuis un controller).

Imaginons une méthode basique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function createAlbum(array $data, $userId)
{
    if (!$this->_authService->isAllowed($this->_authService->getCurrentUser(), $this, 'create')) {
            throw new UnauthorizedException();
        }
    
    // validation + filtrage des données
    // récupération user dans $user puis :
    $album = new Album($data);
    $user->addAlbum($album);
    
    $this->_userRepository->save($user);
}
J'ai le choix entre :
- createAlbum(data, userId) et je récupère mon model user avec le repository
- createAlbum(data, User user)
- createAlbum(data) et je recupère mon user grâce à ma méthode getCurrentUser() de mon service Auth directement dans le service album.


Alors docteur(s) ? c'est quoi l'idéal ? sachant que le controlleur ne fait que passer le relais, il ne porte aucun traitement métier.

Je n'ai pas posé ma question dans les forums PHP car peu importe le langage, la question reste la même

Merci,
A+ benjamin.