0

我正在开发单页应用程序样式的 Web 应用程序。我想根据用户的角色创建菜单,例如,对于管理员用户我想显示管理员菜单和 html 内容,对于一般用户我想显示不同的 html 内容。我正在使用带有 Razor 视图引擎的 asp.net mvc,所以这可以通过 Razor 代码实现,如下所示:

@if (@User.IsInRole("Admin"){
  -- html content for admin --
}else if (@User.IsInRole("General"){
  -- html content for general user --
}else{
  -- html content for the other users --
}

这是我过去以传统方式开发Web应用程序时的典型方式,但是自从我开始开发单页应用程序样式的Web应用程序以来,我尝试编写纯html代码并避免使用Razor,WebForm等服务器端视图引擎asp.net 或 Velocity,Java EE 中的 Jsp 标记库。我想写更独立的前端代码,不依赖服务器代码。

无论如何,当我使用javascript和knockoutjs而不是Razor时,上面的代码可以更改如下,

<!-- ko if: isAdmin -->
-- html content for admin --
<!-- /ko -->
<!-- ko if: isGeneralUser -->
-- html content for general user --
<!-- /ko -->
<!-- ko if: isOtherUser -->
-- html content for the other users --
<!-- /ko -->

isAdmin、isGeneralUser 和 isOtherUser 是 viewmodel 的属性,这些值将通过检查用户角色的 ajax 调用设置。

我想知道的是,从安全的角度来看,这种根据用户角色控制内容的方式是否合适?

如果这些视图因用户角色而异,您如何处理视图内容?想问问大家遇到这种情况是怎么处理的。

4

1 回答 1

0

我会使用模板绑定

<div data-bind="template: { name: template, data: model }"></div>

在视图模型上根据用户角色设置正确的模板和模型,此外,您仍然需要保护角色特定的方法服务器端

补充一点,我已经为约定绑定模板做了一个小框架,它非常适合这样的场景,它还没有完成,所以我会等待在生产站点中使用它,但它将在未来几周内准备好

上面的模板绑定与我的框架看起来像

<div data-bind="coc: model"></div>

如果 ViewModel 被命名为 AdminViewModel,那么我的库将寻找一个名为 AdminView 的模板

一个小小提琴http://jsfiddle.net/2Uvd5/1/

编辑:关于你想要做什么的更准确的例子 http://jsfiddle.net/XaZxj/

于 2012-12-17T13:55:30.350 回答