2013-10-11 3 views
0

Мне было поручено разработать модель, которая вводит ограничения или уровни в существующем веб-приложении. Поэтому приложение не может легко реализовать эту функцию. Serverside - это PHP, clientide - jQuery.Общий способ ограничить действия пользователя в веб-приложении (PHP)

Эти ограничения связаны с планами или подписками, которые пользователь купил.

Я придумал модель, где:

  • Функции отображенной с действиями.
  • Действие - содержательное определение действия, которое пользователь может сделать на приложение.
  • План представляет собой список действий со значимым ограничительным значением.

Реальный пример

  • requestIntroduction() отображается с 'просьбой' < -> 'введение'
  • Действие является 'запрос' из 'введения'
  • Current план позволяет пользователю запрашивать 5 введений
  • Выполните проверку

Я ищу общий способ контролировать ограничения как можно больше в одном месте в коде, потому что:

  • планов будет добавлено, удалено и скорректированным часто будет добавлено
  • Ограничения, удаляются и скорректированным часто (по плану)
  • В будущем в настройках консоли администратора будет включена настройка ограничений и планов.

Мой вопрос: Есть ли лучший способ достичь того же общего подхода для обработки ограничений и свести к минимуму кодирования будущих изменений в планы и/или ограничения?

+0

Вы можете идентифицировать каждое действие с id/кодовым именем и иметь таблицу где-то определяющую действия, которые каждая группа пользователей/пользователя имеет –

+0

@EnoqueDuarte Да, это хорошая идея. – Gnagy

ответ

0

Представьте, что вы определите свои действия такие методы, как «emptyBinAction», «gothereAction» на контроллере (admiting вы используете MVC или подобный шаблон проектирования)

вы можете Исли проверить разрешение на основе имен методов:

пример:

protected function emptyBinAction($params) { 
    $this->checkAccess(); 

    ... 
} 

, например, вы можете использовать checkAccess() проверить логин + если пользователь имеет разрешение на это действие:

protected function checkAccess() { 
    // Check login 
    if ($this->myModel->checkLogin()) { 
     // Query DB for permission (pass user id and func name) 
     if (!$this->myModel->checkPerm($usrId,$this->getCallerName())) { 
      return false; 
     } 
    } 
... 
} 

пример метод для возвращения имени вызывающего абонента (в данном случае будет возвращать «emptyBinAction»):

public function getCallerName() { 
    $e = new Exception(); 
    $trace = $e->getTrace(); 
    return $trace[2]['function']; 
} 

в терминах checkPerm() запросы и структура БД вы можете сделать, как вы хотите, либо атрибут permisions к групп пользователей или для каждого пользователя или обоих.

+0

Ваше предложение - именно то, что я имел в виду, за исключением использования функции, которую вы определяете с помощью getCallerName(), я думал о постоянной магии PHP [__ FUNCTION __] (http://php.net/manual/en/ language.constants.predefined.php). Было бы целесообразно? – Gnagy

+0

как я вижу в справочнике php, значение __FUNCTION__ ниже, поэтому его до вас, я тоже вижу там __METHOD__, который чувствителен к регистру, но никогда не тестировал его, может работать: http: //php.net/manual/en/ language.constants.predefined.php –

+0

Согласно документам, константа возвращает нижнюю строчную строку в PHP 4, но с учетом регистра в PHP 5 и выше. Протестировано и работает, как описано. Платформа использует PHP 5.3, поэтому я считаю безопасным использовать константу. – Gnagy

 Смежные вопросы

  • Нет связанных вопросов^_^