是否有任何方法/最佳做法可以在SAPUI5中隐藏用户的不可用页面?
让我们看一个例子。我有一个带有用户登录页面的复杂应用程序。客户可以在此处登录该应用程序,并从后端系统检索其角色数据。基于这些角色,不允许某些用户创建新对象。只有登录用户才能看到应用程序页面。 我使用路由,因此编辑等功能也可以通过直接链接访问。
目前我在Component.js中使用onRouteMatched事件处理程序,它检查当前用户会话存储。如果未找到用户会话,则会将请求重定向到登录页面。
问题是它在导航到登录页面之前显示请求的页面一两秒钟。这真的很难看。
我应该在哪里实现这种功能?这个用例有没有钩子方法?
我想我需要一个在显示给定路由匹配的视图之前调用的钩子方法,并将调用重定向到登录页面。不幸的是,我在这个主题中找不到任何有用的文档。
谢谢!
答案 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来实现此目的。
注意强>
客户端授权检查永远不会保存,需要在所有后端服务中进行双重检查!