Comment puis-je mettre en œuvre une Liste de Contrôle d'Accès dans mon Web MVC de l'application?

Première question

S'il vous plaît, pourriez-vous m'expliquer comment faire plus simple ACL pourrait être mis en œuvre dans MVC.

Ici est la première approche de l'utilisation des Acl dans le Contrôleur...

<?php
class MyController extends Controller {

  public function myMethod() {        
    //It is just abstract code
    $acl = new Acl();
    $acl->setController('MyController');
    $acl->setMethod('myMethod');
    $acl->getRole();
    if (!$acl->allowed()) die("You're not allowed to do it!");
    ...    
  }

}
?>

Elle est très mauvaise approche, et c'est moins, c'est que nous avons à ajouter Acl morceau de code dans chaque méthode du contrôleur, mais nous n'avons pas besoin de dépendances supplémentaires!

Approche suivante est de faire tous les du contrôleur de méthodes private et ajouter le code ACL dans du contrôleur de __call méthode.

<?php
class MyController extends Controller {

  private function myMethod() {
    ...
  }

  public function __call($name, $params) {
    //It is just abstract code
    $acl = new Acl();
    $acl->setController(__CLASS__);
    $acl->setMethod($name);
    $acl->getRole();
    if (!$acl->allowed()) die("You're not allowed to do it!");
    ...   
  }

}
?>

Il est mieux que le précédent code, mais les principaux inconvénients sont...

  • Tous du contrôleur de méthodes devrait être privé
  • Nous avons à ajouter le code ACL dans chaque contrôleur __appel de méthode.

L'approche suivante est de mettre le code Acl en Contrôleur de parent, mais nous avons encore besoin de garder tous les enfants du contrôleur de méthodes privées.

Quelle est la solution? Et quelle est la meilleure pratique?
Où dois-je appeler Acl fonctions de décider d'autoriser ou d'interdire la méthode à exécuter.

Deuxième question

Deuxième question concerne l'obtention de rôle à l'aide de l'Acl. Imaginons que nous avons des invités, d'utilisateurs et de leurs amis. L'utilisateur dispose d'un accès limité à l'affichage de son profil que seuls vos amis peuvent voir. Tous les invités ne peuvent pas voir ce profil de l'utilisateur. Donc, ici, c'est la logique..

  • nous devons nous assurer que la méthode appelée est de profil
  • nous avons pour détecter le propriétaire de ce profil
  • nous avons à détecter est la visionneuse est propriétaire de ce profil ou pas
  • nous avons à lire les règles de restriction sur ce profil
  • nous avons à décider d'exécuter ou de ne pas signer le profil de la méthode

La question principale est de détecter les propriétaire de profil. Nous pouvons détecter qui est propriétaire de profil de l'exécution du modèle de la méthode $model->getOwner(), mais Acl n'ont pas accès à de modèle. Comment pouvons-nous mettre en œuvre cette?

J'espère que mes pensées sont claires. Désolé pour mon anglais.

Merci.

  • Je ne comprends même pas pourquoi vous avez besoin de "listes de contrôle d'Accès" pour les interactions de l'utilisateur. Ne serait-il pas juste dire quelque chose comme if($user->hasFriend($other_user) || $other_user->profileIsPublic()) $other_user->renderProfile() (sinon, afficher "Vous n'avez pas accès à ce profil de l'utilisateur" ou quelque chose comme ça? Je n'ai pas l'obtenir.
  • Probablement, parce que Kirzilla veut gérer toutes les conditions pour accéder à une place, surtout dans la configuration. Ainsi, tout changement dans les autorisations peuvent être faites dans l'Admin au lieu de changer de code.
InformationsquelleAutor Kirzilla | 2010-08-07