在hottowel asp.net mvc4中基于用户路由和子路由

时间:2014-01-17 12:28:12

标签: asp.net-mvc-4 visual-studio-2012 durandal hottowel

:更新

任何人都可以帮我找到如何根据用户创建路由和子路由 是否可以创建一个Widget来完成工作,如果是这样的话

这就是我的菜单的样子(注意:所有菜单项一起让我们称之为 master ):

-Home
-shop
    -men
    -women
-food
    -dog
    -human
-cart
-settings
    -user
    -images
    -themes

假设我有以下userGroup:

-Admin
-visitors
-vip
-costumers
-co-workers

我想做的事情就像是

if(user == Admin){
   destroy the current menu then make a copy of master **master** remove subroute women and subroute dog then push 
}else if(user == visitor){
   ...
}

还是有更好的方法来做到这一点以及我在哪里定义它?

1 个答案:

答案 0 :(得分:2)

首先,您可能需要考虑将项目升级到Durandal 2.0,因为它消除了对sammy.js的依赖,转而使用效果更好的自定义路由器(Durandal 1.0现在基本上已经过时)。以下是升级页面:http://durandaljs.com/documentation/Conversion-Guide/

以下是新路由器上的文档:http://durandaljs.com/documentation/Using-The-Router/

至于处理基于用户的路由,因为router.map只需要一个路由数组,你可以有条件地建立数组并将其传递给router.map

var routes = [ { route: '', moduleId: 'hello/index', title: 'Hello World', nav: true },
            { route: 'men', moduleId: 'men/index', title: 'Men',  nav: true }]
if(user == Admin){
    routes.push({ route: 'admin', moduleId: 'admin/index', title: 'Admin',  nav: true }
}else if(user == visitor){
    routes.push({ route: 'women', moduleId: 'women/index', title: 'women',  nav: true }
}
return router.map(routes)
          .buildNavigationModel()
          .mapUnknownRoutes('hello/index', 'not-found')
          .activate();