2011-06-28 84 views
10

我想要一些具有PHP经验的人的建议。对不同角色的用户显示不同的页面

我在做一个PHP的网站,这将有4个种类的用户: 1.客人(未注册), 2.注册, 3.有特殊的privilages注册, 4.管理员

所以相同的页面对于其中的全部四个将是不同的。

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

它使代码非常大而且不整洁,我必须在所有页面中一次又一次地检查条件。

  1. 有没有更好的方法来做到这一点?

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

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

+0

扩展答案:是的,ACL是一个访问控制列表。它基本上说“这是一个用户帐户详细信息页面,因此可以通过以下角色访问:'注册用户','管理员','超级用户','上帝'”。 – cypher

回答

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

+1

谢谢。虽然花了一些时间去了解,但我明白了。任何想法如何由大型专业网站完成? –

+0

依靠大型专业网站取决于您的意思。我为大型网站运行和开发,并且每次都是根据参数是不同的解决方案。例如,您必须记住,每次PHP访问文件系统时都会遇到很大的性能问题,但有些加速器/优化器通常可以提供帮助(我使用eAccelerator)。 – Fabrizio

+0

我最近的两个大网站我使用了两个组合,其中我想包含的模板被传递给“can_user”,并且在用户没有权限时返回模板名称本身或不同的模板名称看那部分。类似'include can_user('read','button','button_html');'和can_user函数将会是'return $ this_user_can?$模板, 'permission_deny_in_page';' – Fabrizio

相关问题