我想要做的是根据用户的认证角色锁定我的durandal(knockoutjs / breezejs)SPA应用程序中的某些页面(即,如果您是管理员等,您应该看到其他人不应该看到的页面“T)。
理想情况下,服务器代码可以用于根据角色输出链接,但由于durandal和SPA应用程序在服务器代码中并没有真正起作用,所以我很茫然。
我意识到这个问题已经在这里以其他形式提出(即如何使用带有Durandal的.cshtml(服务器)页面),这可能是一个选项,如果我可以让它工作。我还没有找到一个适合我的完整例子。
任何想法都赞赏!
答案 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文件等,但我的所有控制器和操作都有授权属性,因此数据受到保护。