对具有不同角色的用户显示不同的页面

时间:2011-06-28 21:22:27

标签: php kohana kohana-3

我想要一些有php经验的人的建议。

我在php中创建一个有4种用户的网站:  1.客人(未注册),  2.注册,  3.在特殊特权处注册,  4.管理员

因此,同一页面对所有四个页面的显示方式都不同。

现在我正在使用if条件来做到这一点。 在每个页面中,我正在检查用户的role,然后使用许多if语句来相应地显示页面。

它使代码变得非常大且不整洁,我必须在所有页面中反复检查条件。

  1. 有更好的方法吗?

  2. 这是如何在大型专业网站上完成的?

  3. 扩展问题: 使用像kohana 3.1这样的MVC框架来做同样的事情的最佳方法是什么?它与acl有什么关系吗?

1 个答案:

答案 0 :(得分:5)

这实际上取决于你的需求。

例如,如果页面的大部分内容完全改变,我建议创建不同的模板并根据其“权限”包含它们

 $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”,你需要创建一个函数