Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Routing SAPUI5限制页面可见性_Routing_Authorization_Sapui5 - Fatal编程技术网

Routing SAPUI5限制页面可见性

Routing SAPUI5限制页面可见性,routing,authorization,sapui5,Routing,Authorization,Sapui5,是否有任何方法/最佳实践可以对SAPUI5中的用户隐藏不可用的页面 让我们看一个例子。我有一个带有用户登录页面的复杂应用程序。在这里,客户可以登录到应用程序,并从后端系统检索他们的角色数据。基于这些角色,不允许某些用户创建新对象。只有登录的用户才能看到应用程序页面。 我使用的是路由,所以像编辑这样的功能也可以通过直接链接访问 目前,我正在Component.js中使用onRouteMatched事件处理程序,它检查当前用户会话存储。如果找不到用户会话,它会将请求重定向到登录页面 问题是,在导航到

是否有任何方法/最佳实践可以对SAPUI5中的用户隐藏不可用的页面

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

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

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

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

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


谢谢

不幸的是,据我所知没有一个简单的钩子。我很想在
sap.ui.core.routing.Router
上看到一个
之前的路由匹配
或者类似的东西,但是现在没有什么

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

根据授权动态添加路线

首先将您的路由配置存储在一个简单对象中,然后在您的授权调用返回后,使用routers方法根据用户授权动态添加允许的路由。另外,您需要注意的唯一一件事是访问应用程序的初始路径。您必须存储该散列,直到设置路由配置,并在添加路由后重新触发初始导航。使用来实现这一点

注意


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

这里记录了我在这方面使用的方法

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

在应用程序中,可以“显示”视图,而不是路由到视图。行为是相同的,只是您确实丢失了历史记录。因此,按browser back(浏览器后退)按钮的行为会有所不同,因为您实际上没有路由到新视图

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"
        });
    }
}

只是一个想法:让你的观点由两个观点组成。占位符(显示在路径匹配的
onRouteMatched
…前面可能是一个带有
busy:true
的空面板)和实际内容(在找到用户会话时替换占位符)。这并不能解决1-2秒的延迟问题。但它隐藏了一些丑陋。我和你有完全相同的问题和解决方案。我想出了一个解决方案来覆盖路由器中的
parse
函数,在这个函数中,您将只接收url更改的哈希值,并且您必须根据您的路由和权限解析哈希值。如果授予了权限,我将使用参数执行超级解析,否则我将为函数提供空参数(
[“”,未定义]