Отображение одной и той же страницы по-разному для пользователей с разными ролями - PullRequest
10 голосов
/ 29 июня 2011

Мне нужны были предложения от кого-то с опытом работы в php.

Я делаю сайт на php, который будет иметь 4 вида пользователей: 1. гость (незарегистрированный), 2. зарегистрирован, 3. зарегистрированы со специальными привилегиями, 4. администраторы

Таким образом, одна и та же страница будет видна по-разному для всех четырех из них.

Прямо сейчас я делаю это, используя if условия. На каждой странице я проверяю role пользователя, а затем использую множество операторов if для отображения соответствующей страницы.

Это делает код очень большим и неопрятным, и мне приходится снова и снова проверять условия на всех страницах.

  1. Есть ли лучший способ сделать это?

  2. Как это делается на крупных профессиональных сайтах?

  3. Расширенный вопрос: Каков наиболее оптимальный способ сделать то же самое с использованием инфраструктуры MVC, такой как Kohana 3.1? Это как-то связано с acl?

1 Ответ

5 голосов
/ 29 июня 2011

Это действительно зависит от того, что вам нужно.

Например, если большая часть страницы полностью меняется, я бы предложил создать разные шаблоны и включить их в зависимости от их «разрешений»

 $permission = $_SESSION['type_user'];
 include '/path/to/file/with/permission/'.$permission.'/tpl.html';

и на странице есть что-то похожее на

<?php
//inside include.php you have the line similar to
//$permission = isset($_SESSION['type_user']) && $_SESSION['type_user']!=''?$_SESSION['type_user']:'common';
require_once '/mast/config/include.php';
include '/path/to/file/with/permission/common/header.html';
include '/path/to/file/with/permission/'.$permission.'/tpl_1.html';
include '/path/to/file/with/permission/common/tpl_2.html';
include '/path/to/file/with/permission/'.$permission.'/tpl_3.html';
include '/path/to/file/with/permission/common/footer.html';
?>

, если скрипт полон мелких деталей, таких как «показать этот текст» или «показать эту кнопку», вы можете создать функциюкоторый проверит для вас права доступа

<?php
function can_user($action, $what){
   switch($action){
      case 'write':
          return $your_current_if_on_what;
          break;
      case 'read':
      default:
          return $your_current_if_on_what;
          break;
   }
}
?>

and the template will look like:

[my html]
<?=can_user('read','button')?'My Button':''?>
[my html]

Как правило, если фрагмент кода используется более 2 раз, его необходимо поместить в функцию / файл отдельно, поэтому, если у вас естьмного «IFS» нужно для создания функции

...