2

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

  1. 根据用户的授权显示/隐藏仅供管理员使用的小部件,
  2. 根据用户是否经过身份验证更改菜单选项(对于匿名显示 - 登录/注册以及经过身份验证时显示 "Welcome .." 。

如果这是一个常规的 MVC4 应用程序,我会使用 @if (User.Identity.IsAuthenticated) { ... } 签入剃刀视图,但在 durandal 视图中,这被排除在外。

我想避免将敏感的业务逻辑放入 javascript - 如果他是管理员,用户不需要知道他可以使用什么样的选项。

在 Durandal & Knockout 中实现这一目标的最佳方法是什么?到目前为止,我一直在使用经典的 ASP.NET 进行编码,最近使用了 ASP.NET MVC。使用 Durandal 开发 SPA 对我来说是一个新游戏......如果有人可以只给我步骤/指针来做到这一点,那也会有很大帮助......提前谢谢!

4

1 回答 1

3

我这样做的方式。

  1. 我的菜单是在 menubar.js 文件中构建的。menuItems 最初是 observableArrays([]) 并且我订阅了一个主题“用户登录”。
  2. 当用户登录时,我获取用户的权限/角色并将它们存储在本地存储中。然后发送带有用户数据的通知“用户登录”。
  3. 我的菜单栏收到通知,检查权限/角色并适当地添加各种菜单项。
  4. shell.html 具有 menubar.js 的视图组合。因此,如果有菜单项,它就会显示出来,否则就不会。因此,当用户登录时,会填充 menuItems,此时会显示菜单项。
  5. 当用户注销时,我清除本地存储缓存并发送一条消息“用户注销”。
  6. menubar.js 收到此消息并清除它的菜单项,实质上是清除 menubar.htm 上的菜单

您基本上可以对小部件执行相同的操作,并使用可见绑定到隐藏或显示特定权限/角色的属性。

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

希望有帮助

于 2013-04-16T13:32:57.980 回答