2014-09-20 99 views
-3

我需要檢查用戶對方法的可訪問性。如何在其他方法之前調用方法

當調用腳本的方法時,我必須檢查用戶是否有權訪問該方法。如果不是,該方法應該是return false

我做了一個名爲_access()的方法來檢查可訪問性。

如何在每隔一個方法之前調用此方法。

我無法通過我自己的每種方法調用_access()

OBJ:

class foo{ 
    function a() 
     $this->_access(); //I dont want to do this for every functions... 
    } 
    function b() 
     //b() should stop if _access() == false 
    } 
    function _access() 
     //return true or false; 
     //this method can backtrace and check user accessibility to caller method. 
    } 
} 

在此先感謝。

+0

hvnt你聽說過嗎? – 2014-09-20 11:16:59

回答

3

您可以使用PHP 5.0+中的魔術方法,它允許您隱藏方法並事先運行腳本。

Read about magic methods

class foo{ 
    public function __call (string $name , array $arguments) 
    { 
     if($this->_access) 
      $name($arguments); 
     else 
      echo "User does not have access"; 
    } 

    private function a(){} 
    private function b(){} 
    private function _access() 
     //return true or false; 
    } 
} 

編輯


您可以通過使其成爲一個基類,然後擴展在所有類的很容易實現這一點。

class BaseMethodAccess{ 
    public function __call (string $name , array $arguments) 
    { 
     if($this->_access) 
      $name($arguments); 
     else 
      echo "User does not have access"; 
    } 

    private function _access() 
     //return true or false; 
    } 
} 

class Foo extends BaseMethodAccess{ 
    private function getName(){} 
} 

您還可以實施__get方法來修改對屬性的訪問權限。

+0

這是個好主意......但我的網站有上百種方法。我的網站不夠好。謝謝... – Pooya 2014-09-20 12:02:43

+0

我改變了主意。如何在公共函數上觸發__call()? – Pooya 2014-09-20 12:24:16

+0

您無法觸發公共職能。在調用magic方法之前,該函數必須是不可訪問的,這意味着該方法需要是私有的,或者它不需要通過名稱來存在。 – BayssMekanique 2014-09-20 16:33:55

相關問題