ACL uygulama

0 Cevap php

First question

, Sen simpliest ACL MVC uygulamaya nasıl bana açıklayabilir edin.

İşte Controller Acl kullanarak ilk yaklaşımdır ...

<?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!");
    ...    
  }

}
?>

Çok kötü bir yaklaşım olduğunu ve en eksi her kontrolörün yönteme kod Acl parça eklemek zorunda olduğunu, ancak herhangi bir ek bağımlılıkları gerek yok!

Sonraki yaklaşım, tüm kontrolörün yöntemlerini private yapmak ve kontrolörün __call yöntem haline ACL kodu eklemektir.

<?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!");
    ...   
  }

}
?>

Daha önceki kod daha iyi olduğunu, ancak ana eksileri vardır ...

  • Tüm kontrolörün yöntemler özel olmalı
  • Her kontrolörün __ çağrısı yöntemi içine ACL kod eklemek zorunda.

Sonraki yaklaşım ana Kontrolörü içine Acl kod koymak için, ama biz hala özel tüm alt kontrolörünün yöntemleri tutmak gerekir.

What is the solution? And what is the best practice? Where should I call Acl functions to decide allow or disallow method to be executed.

Second question

İkinci soru Acl kullanarak rol alma hakkında. Kullanıcının biz misafir, kullanıcı ve kullanıcının arkadaş olduğunu hayal edelim. Kullanıcı yalnızca arkadaş görüntüleyebilirsiniz onun profilini inceleyen erişimi kısıtlı. Tüm konuklar Bu kullanıcının profilini görmek olamaz. Yani, burada mantıktır ..

  • biz çağrıldığını bu yöntem profili sağlamak zorunda
  • Bu profilin sahibini tespit etmek zorunda
  • bizim algılamak zorunda izleyici bu profilin sahibi ya da hiç olduğunu
  • Bu profili hakkında kısıtlama kurallarını okumak zorunda
  • Biz yürütmek veya profil yöntemi karar vermek zorunda

Ana soru profilinin sahibini tespit ilgilidir. Biz sadece modelin yöntemi $ modeli-> GetOwner () yürütme profil sahibi kim olduğunu tespit edebilir, ama Acl modeline erişimi yok. Bunu nasıl uygulayabilir?

Ben düşüncelerimi açık umuyoruz. İngilizcem için özür dilerim.

Teşekkür ederim.

0 Cevap