2

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

理想情况下,服务器代码可用于输出链接或不基于角色,但由于 durandal 和 SPA 应用程序并不能真正与服务器代码一起工作,我不知所措。

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

任何想法表示赞赏!

4

1 回答 1

2

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

例如。在您的外壳视图模型的激活方法中

外壳.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 传递给 map 函数以创建用户有效路线等。

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

于 2013-10-30T19:08:29.087 回答