如何根据个人资料构建具有动态菜单的网站?

时间:2014-01-29 23:46:43

标签: javascript php jquery html5 codeigniter

我想使用用户个人资料创建一个网站,并根据所选的个人资料动态构建菜单,例如,如果我需要管理员用户,菜单包含所有权限而不受限制,如果需要卖家我需要构建菜单取决于卖家可以执行的任务,例如目录,价格等。

我目前正在为每个用户做一个菜单,即做一个叫做管理员的菜单和另一个卖家,当有人登录时,应该验证配置文件,例如,如果登录用户是管理员,则加载管理员菜单,如果它是卖方收费卖家菜单,但我不想这样做,因为可能有超过20个角色,需要优化,我很感激有一些帮助,我正在使用html5,PHP, JavaScript的。

谢谢

3 个答案:

答案 0 :(得分:1)

这可能更适合用PHP而不是JavaScript。当然菜单运动的东西都是用JavaScript编写的,但我不认为这就是你所要求的(如果你需要帮助的话,它应该是它自己的问题)。

对于菜单,不要构建每个菜单,而是翻转它。对于每个可能的项目,定义哪些角色可以看到该项目。然后,浏览每个项目,拉出与用户给定角色匹配的项目。

这段代码是通用的,因为我不知道你在做什么,但是:

class MenuItem {
    public $name;
    public $url;
    public $allowedRoles;

    public function __construct($name, $url, $allowedRoles) {
        $this->name = $name;
        $this->url = $url;
        $this->allowedRoles = $allowedRoles;
    }
}

$items = array(
   new MenuItem('Everyone', 'http://example.com', array('seller', 'admin')),
   new MenuItem('Sellers Only', 'http://example.com/seller', array('seller')),
   new MenuItem('Admins Only', 'http://example.com/admin', array('admin'))
);

function getItemsForRole($items, $role) {
   $userItems = array();

   foreach ($items as $item) {
      if (in_array($role, $item->allowedRoles) {
          $userItems[] = $item;
      }
   }

   return $userItems;
}

$adminItems = getItemsForRole($items, 'admin');
$sellerItems = getItemsForRole($items, 'seller');

您仍然需要用户的逻辑并构建相应的菜单,但希望这能为您提供想法。

答案 1 :(得分:0)

你可以通过几种方式做到这一点。

  1. 为每种类型都有一个包含文件,尽管有20个配置文件可能会有很多文件。
  2. 根据菜单的结构,使用多维数组,用户类型作为键,每个项目的值为第二个数组,包含所有菜单项。然后使用php移动数组。
  3. 你可以用另一种方式完成你的阵列,并拥有完整的菜单,然后根据阵列中的设置显示部分,具体取决于分配给它的用户。

答案 2 :(得分:0)

这是Knockout.js的一个很好的应用程序 - 使用类型创建用户视图模型,然后使用data-bind="with: User, visible: User.Type()=='Admin' || User.Type() == 'Sales'"作为HTML属性来自动隐藏/显示菜单项。

当然,为了保证安全,您仍然需要检查用户是否具有执行给定操作的正确访问级别,但这是一个相对简单的过程。