Durandal + Knockout开发单页应用程序:根据授权选择性地显示部分页面

时间:2013-04-16 04:33:31

标签: asp.net-mvc durandal

我正在使用Durandal,knockout来创建单页应用程序。我需要做以下(两件非常简单的事情):

  1. 根据用户的授权,显示/隐藏仅供管理员使用的小部件
  2. 根据用户是否经过身份验证更改菜单选项(对于匿名显示 - 登录/注册以及经过身份验证时显示“欢迎..”。
  3. 如果这是一个常规的MVC4应用程序,我会使用它 @if(User.Identity.IsAuthenticated){...}检查剃刀视图,但是在durandal中有视图,这被排除了。

    我想避免将敏感的业务逻辑放在javascript中 - 如果用户是管理员,用户无需知道他可以使用哪种选项。

    在Durandal& amp; amp; amp; amp; amp; amp; amp; amp;昏死?到目前为止,我一直使用经典ASP.NET进行编码,最近使用ASP.NET MVC。使用Durandal开发SPA对我来说是一款新游戏...如果有人能给我这样做的步骤/指示也会有很大帮助......提前谢谢!

1 个答案:

答案 0 :(得分:3)

我的方式。

  1. 我的菜单是在menubar.js文件中构建的。 menuItems最初是observableArrays([]),我订阅了一个主题“user-logged-in”。
  2. 当用户登录时,我获得用户的权限/角色并将其存储在本地存储中。然后使用用户数据发送“用户登录”通知。
  3. 我的菜单栏收到通知,检查权限/角色并适当添加各种菜单项。
  4. shell.html具有menubar.js的视图合成。因此,如果有菜单项,它会显示,否则它不显示。因此,当用户登录时,将填充menuItems,此时将显示菜单项。
  5. 当用户退出时,我清除本地存储缓存并发出“用户登出”消息。
  6. menubar.js收到此消息并清除它的菜单项,基本上清除menubar.htm上的菜单
  7. 您可以基本上对窗口小部件执行相同的操作,并使用对隐藏或显示特定权限/角色的属性的可见绑定。

    同样重要的是router.guardRoute。阅读此内容,以便人们无法在不登录的情况下直接前往路线。

    希望有所帮助