如何根据用户在angularjs中的角色显示不同的菜单项?

时间:2014-07-01 01:02:08

标签: javascript angularjs drop-down-menu menu menuitem

我正在使用meanjs堆栈来编写Web应用程序。我需要向所有用户显示下拉菜单(登录或不登录),然后在用户登录时向下拉列表中添加更多元素。

例如,假设您有一个产品列表。您创建一个名为“Products”的下拉菜单,其中包含“List products”元素。如果用户已登录,则会显示此“列表产品”元素。如果用户已登录,则在名为“编辑库存”的下拉列表中显示另一个元素。

meanjs网站说堆栈使用"AngularJS Menus Service"并列出了一些文档,但我找不到有关此服务使用情况的更多信息。链接的文档提到了可选参数isPublicroles,但是当我尝试使用它们时,没有任何效果。

代码Menus.addMenuItem('topbar', 'Bios', 'bios', 'dropdown', '/bios(/create)?');仅在用户登录时显示此菜单项。

它与Menus.addMenuItem('topbar', 'Bios', 'bios', 'dropdown', '/bios(/create)?', true);具有相同的效果。可选的isPublic参数似乎没有任何区别。我做错了什么?

我找到了this question,这是相似但不完全相同的,也没有得到满意的回答。

要在角度中使用菜单服务,用户是否有必要登录?

2 个答案:

答案 0 :(得分:2)

我刚刚阅读了meanjs MenuService源代码,这是addMenuItem:

 this.addMenuItem = function (menuId, menuItemTitle, menuItemURL, menuItemType, menuItemUIRoute, isPublic, roles) {
  // Validate that the menu exists
  this.validateMenuExistance(menuId);
  // Push new menu item
  this.menus[menuId].items.push({
    title: menuItemTitle,
    link: menuItemURL,
    menuItemType: menuItemType || 'item',
    menuItemClass: menuItemType,
    uiRoute: menuItemUIRoute || '/' + menuItemURL,
    isPublic: isPublic || this.menus[menuId].isPublic,
    roles: roles || this.defaultRoles,
    items: [],
    shouldRender: shouldRender
  });
  // Return the menu object
  return this.menus[menuId];
};

从此代码中,如果您要重置isPublic,则应使用menuItemUIRouteisPublic调用func。

因为你没有通过menuItemUIRoute。参数将混淆。

P.S这是第237行中的Source Code,文档不对,或者这是一个错误。希望这对你有用。 :)

答案 1 :(得分:-1)

这对我有用

核心菜单服务中的

**替换

//定义一组默认角色

 this.defaultRoles = ['user'];

 this.defaultRoles = ['user','admin'];**

在文章配置中

主菜单

Menus.addMenuItem('topbar','Articles','articles','dropdown','/ articles(/ create)?',true,['admin']);

对于子菜单

Menus.addSubMenuItem('topbar','articles','New Article','articles / create','menuItemUIRoute',true,['admin']);