2014-09-20 7 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 u слышал, если заявления ?? –

ответ

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

+0

Я передумаю. как вызвать __call() для публичных функций? – Pooya

+0

Вы не можете запускать публичные функции. Эта функция должна быть недоступна до вызова магического метода, так что это означает, что метод должен быть закрытым, или ему не должно быть имя под названием. – BayssMekanique