在Durandal SPA,MVC网络应用程序中显示基于身份验证角色的页面?

时间:2013-10-30 18:22:26

标签: asp.net-mvc-4 durandal simple-authentication

我想要做的是根据用户的认证角色锁定我的durandal(knockoutjs / breezejs)SPA应用程序中的某些页面(即,如果您是管理员等,您应该看到其他人不应该看到的页面“T)。

理想情况下,服务器代码可以用于根据角色输出链接,但由于durandal和SPA应用程序在服务器代码中并没有真正起作用,所以我很茫然。

我意识到这个问题已经在这里以其他形式提出(即如何使用带有Durandal的.cshtml(服务器)页面),这可能是一个选项,如果我可以让它工作。我还没有找到一个适合我的完整例子。

任何想法都赞赏!

1 个答案:

答案 0 :(得分:2)

您可以将路由信息保存在服务器上,并在初始化时将其提供给应用程序。

例如。在shell viewmodel的activate方法中

shell.js

define(['durandal/system', 'plugins/router', 'durandal/app', 'services/datacontext'],
    function (system, router, app, datacontext) {

        var routeInfo = ko.observable();

        var shell = {
            activate: activate,
            router: router

        };

        return shell;

        //#region Internal Methods
        function activate() {
            app.title = "Sample App";
            return boot();
        }

        function boot() {
            return datacontext.getRouteInformation(routeInfo).then(function() {
                return router.map(routeInfo()).buildNavigationModel().mapUnknownRoutes('error', 'Error').activate();
            });
        }
        //#endregion
    });

我的datacontext.getRouteInformation()根据当前用户安全上下文获取路径信息的json数组,并填充routeInfo observable。然后将observable传递给map函数以创建用户有效的路由等。

我知道这并没有完全“锁定”html文件等,但我的所有控制器和操作都有授权属性,因此数据受到保护。