动态html内容取决于用户的角色

时间:2012-12-17 13:22:52

标签: backbone.js knockout.js javascript-framework singlepage

我正在开发单页面应用程序样式的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 ,asp.net中的WebForm或Java EE中的Velocity,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调用来设置。

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

如果这些视图因用户角色而异,您如何处理视图内容? 我想你们怎么处理这种情况。

1 个答案:

答案 0 :(得分:0)

我会使用模板绑定

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

在viewmodel上设置正确的模板和模型,具体取决于User角色,还需要保护角色特定的方法服务器端

一点注意事项,我为Convention绑定模板做了一个小框架,它非常适合这样的场景,还没有完成,所以我会等到在生产站点中使用它,但它会在未来几周

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

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

如果ViewModel名为AdminViewModel,那么我的库将查找名为AdminView的模板

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

编辑:更准确地说明您想做什么 http://jsfiddle.net/XaZxj/