我想使用用户个人资料创建一个网站,并根据所选的个人资料动态构建菜单,例如,如果我需要管理员用户,菜单包含所有权限而不受限制,如果需要卖家我需要构建菜单取决于卖家可以执行的任务,例如目录,价格等。
我目前正在为每个用户做一个菜单,即做一个叫做管理员的菜单和另一个卖家,当有人登录时,应该验证配置文件,例如,如果登录用户是管理员,则加载管理员菜单,如果它是卖方收费卖家菜单,但我不想这样做,因为可能有超过20个角色,需要优化,我很感激有一些帮助,我正在使用html5,PHP, JavaScript的。
谢谢
答案 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)
你可以通过几种方式做到这一点。
答案 2 :(得分:0)
这是Knockout.js的一个很好的应用程序 - 使用类型创建用户视图模型,然后使用data-bind="with: User, visible: User.Type()=='Admin' || User.Type() == 'Sales'"
作为HTML属性来自动隐藏/显示菜单项。
当然,为了保证安全,您仍然需要检查用户是否具有执行给定操作的正确访问级别,但这是一个相对简单的过程。