【问题标题】:Dynamic html content depending on user's role取决于用户角色的动态 html 内容
【发布时间】:2012-12-04 14:23:40
【问题描述】:

我正在开发单页应用程序风格的 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 或 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 调用设置。

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

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

【问题讨论】:

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


    【解决方案1】:

    我会使用模板绑定

    <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/

    【讨论】:

    • 我认为你的回答的底线是通过javascript代码检查用户的角色和控制视图内容很好,但请确保检查服务器端的安全性,对吗?跨度>
    • 我的问题的意图略有不同,我也打算检查服务器端的安全性,但是我想知道的是,在 javascript 中以这种方式检查安全性是可以的看法?因为不良用户可以使用javascript代码来检查用户的角色,不是吗?
    • 如果是这样,我不能使用任何与安全相关的 JavaScript 代码,例如角色、标识符等。相反,我必须使用服务器端代码来检查用户的角色,不是吗?
    • 你永远不能依赖客户端代码。所有管理方法都必须受到保护,以便其他用户无法向他们发帖
    猜你喜欢
    • 2013-11-23
    • 2019-05-15
    • 2021-12-12
    • 2016-11-07
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2017-10-24
    相关资源
    最近更新 更多