ITPub博客

首页 > 数据库 > 数据库开发技术 > HarmonyOS NEXT应用开发基础架构搭建-路由页面权限控制

HarmonyOS NEXT应用开发基础架构搭建-路由页面权限控制

数据库开发技术 作者:DevPro 时间:2024-12-18 14:10:57 0 删除 编辑

HarmonyOS NEXT应用开发基础架构搭建-设计理念和目录结构

HarmonyOS NEXT应用开发基础架构搭建-模块设计

HarmonyOS NEXT应用开发基础架构搭建-路由管理

HarmonyOS NEXT应用开发基础架构搭建-路由页面权限控制

HarmonyOS NEXT应用开发基础架构搭建-多端布局之自适应布局

HarmonyOS NEXT应用开发基础架构搭建-多端布局之响应式布局

HarmonyOS NEXT应用开发基础架构搭建-多端布局之栅格布局

HarmonyOS NEXT应用开发基础架构搭建-多端布局之挪移布局

路由页面权限控制,用于确保特定权限用户只能访问被授权观看页面和功能。在app中不同用户角色可能拥有不同级别的访问权限。
一般需要经过一下步骤:
  1. 用户角色与权限:系统会为用户分配角色(如管理员、编辑、普通用户等),每个角色对应一组特定的权限,这些权限决定了用户可以访问哪些功能或页面。

  2. 路由配置:在应用中,通常使用路由库管理页面导航。每个路由可以配置自定义信息,用于存储页面所需的权限信息。

  3. 权限检查:在用户尝试访问一个页面之前,通过路由拦截器执行权限检查。

  4. 判断跳转:根据全新进行页面跳转或者提示,确保用户仅能看到并访问其权限内的页面。

例如我们使用电商app,在未登录的情况下,访问某个功能页面,应用会自动跳转到登录页面,如果在视图的点击事件中进行逻辑判断,会产生很多重复代码。可以在路由中进行拦截。

比如在 ”我的“页面,用户点击卡券或者账号等需要登录权限的页面,通过路由拦截进行处理,没有登录时,跳转去登录。

在鸿蒙Next中,我们使用Navigation + 系统路由表的形式来实现页面的整体导航跳转功能,具体细节可以查看上一篇帖子 鸿蒙Next基础架构搭建-路由管理。

  1. 首先实现登录页面和”我的“页面。登录页面用于登录, ”我的“页面用于展示用户的可用功能。

    cke_128112.png

  2. 登录页面。这里只实现视图展示

    @Entry({ routeName: 'LoginPage' })
    @Component
    export struct LoginPage {

    build() {
    Column({ space: 12 }) {
    Text('登录页面')
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .align(Alignment.Center)
    }
    }
  3. ”我的“页面。该模块包含”我的“页面和我的收藏 两个页面。分别命名为Mine和MyCollectionPage。

    cke_179734.png

    Mine页面中点击按钮 跳转去 收藏页面

  4. 接下来实现路由拦截。api12提供了setInterception事件。

    setInterception(interception: NavigationInterception): void

    设置Navigation页面跳转拦截回调。

    参数:

    名称 类型 必填 描述
    interception NavigationInterception 是 设置Navigation跳转拦截对象。

  5. 在Navigation页面中使用setInterception对跳转进行拦截。当没有登录权限时,且页面是 收藏页面,则跳转去 登录页面。
    registerInterception() {
    this.appPathStack.setInterception({
    willShow: (from: NavDestinationContext | "navBar", to: NavDestinationContext | "navBar",
    operation: NavigationOperation, animated: boolean) => {
    let target: NavDestinationContext = to as NavDestinationContext;
    if (operation === 1) {
    if (!this.isLogged && target.pathInfo.name === 'MyCollectionPage') {
    target.pathStack.pop();
    try {
    import('login/src/main/ets/pages/LoginPage');
    router.replaceNamedRoute({
    name: 'LoginPage',
    });
    } catch (err) {

    }
    }
    }
    },
    didShow: (from: NavDestinationContext | "navBar", to: NavDestinationContext | "navBar",
    operation: NavigationOperation, isAnimated: boolean) => {

    },
    modeChange: (mode: NavigationMode) => {

    }
    })
    }

最终实现效果如图:

Emulator2024-06-1818-24-29-ezgif.com-video-to-gif-converter.gif

HarmonyOS NEXT应用开发基础架构搭建-设计理念和目录结构

HarmonyOS NEXT应用开发基础架构搭建-模块设计

HarmonyOS NEXT应用开发基础架构搭建-路由管理

HarmonyOS NEXT应用开发基础架构搭建-路由页面权限控制

HarmonyOS NEXT应用开发基础架构搭建-多端布局之自适应布局

HarmonyOS NEXT应用开发基础架构搭建-多端布局之响应式布局

HarmonyOS NEXT应用开发基础架构搭建-多端布局之栅格布局

HarmonyOS NEXT应用开发基础架构搭建-多端布局之挪移布局

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-01-26

  • 博文量
    6
  • 访问量
    24