SAPUI5限制页面可见性

时间:2015-12-14 10:05:11

标签: routing authorization sapui5

是否有任何方法/最佳做法可以在SAPUI5中隐藏用户的不可用页面?

让我们看一个例子。我有一个带有用户登录页面的复杂应用程序。客户可以在此处登录该应用程序,并从后端系统检索其角色数据。基于这些角色,不允许某些用户创建新对象。只有登录用户才能看到应用程序页面。 我使用路由,因此编辑等功能也可以通过直接链接访问。

目前我在Component.js中使用onRouteMatched事件处理程序,它检查当前用户会话存储。如果未找到用户会话,则会将请求重定向到登录页面。

问题是它在导航到登录页面之前显示请求的页面一两秒钟。这真的很难看。

我应该在哪里实现这种功能?这个用例有没有钩子方法?

我想我需要一个在显示给定路由匹配的视图之前调用的钩子方法,并将调用重定向到登录页面。不幸的是,我在这个主题中找不到任何有用的文档。

谢谢!

2 个答案:

答案 0 :(得分:1)

我在此处使用的方法Display a Target

总而言之,您可以将视图分配给manifest.json中的目标,而不是路径/模式。这使得它无法通过直接链接访问。

在您的应用程序中,您可以“显示”视图而不是路由到该视图。行为是相同的,除了你确实失去了历史。因此,按下浏览器后退按钮的行为会有所不同,因为您实际上没有路由到新视图。

this.getOwnerComponent().getRouter().getTargets().display("edit", {
    fromTarget : "home"
});

如果您仍希望通过直接链接访问视图,则可以在允许所有用户访问的视图中使用自定义URL参数。

例如,您可以使用路线

yourAppUrl.com/home?navTo=edit

在你的控制器中,使用jQuery来解析参数。

_onPatternMatched: function() {
    var navParam = jQuery.sap.getUriParameters().get("navTo");
    if (navParam === "edit") {
        //handle your user verification here, then display the target
        this.getOwnerComponent().getRouter().getTargets().display("edit", {
            fromTarget : "home"
        });
    }
}

答案 1 :(得分:0)

不幸的是,我所知道的并不容易。我很想在beforeRouteMatched看到sap.ui.core.routing.Router或同样的人,但现在却什么都没有......

无论如何,你有各种各样的可能性来实现这一目标。我能想到的最有希望的解决方案是这样的:

根据授权动态添加路线

首先将路由配置存储在一个简单对象中,然后使用路由器addRoute方法在授权呼叫恢复后根据用户授权动态添加允许的路由。唯一需要注意的是访问应用程序的初始路径。您必须存储该哈希值,直到您的路由配置设置为止,并在添加路由后重新触发初始导航。使用HashChanger.setHash来实现此目的。

注意

客户端授权检查永远不会保存,需要在所有后端服务中进行双重检查!