适配版本:HarmonyOS 5.0.0 或以上
阅读目标:构建一个多角色支持的教育类应用权限系统,支持登录后按身份加载页面、控制可见功能、实现角色逻辑隔离


🧱 一、教育系统常见角色定义

角色 权限说明
学生 课程浏览、刷题练习、提交作业、查看成绩
教师 发布课程、批改作业、题库管理、课程内容编辑
管理员 用户管理、课程审核、系统配置、内容监管

✅ 系统需支持登录后根据身份加载对应的页面和功能入口。


🔐 二、用户角色模型设计(RDB 结构)

CREATE TABLE IF NOT EXISTS users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT,
  password TEXT,
  role TEXT,           -- student / teacher / admin
  created_at INTEGER
)

📦 三、登录后权限信息缓存

import preferences from '@ohos.data.preferences'

export async function saveLoginInfo(user: { id: number, role: string }) {
  const prefs = await preferences.getPreferences(getContext(globalThis), 'user_info')
  await prefs.put('role', user.role)
  await prefs.put('uid', user.id)
  await prefs.flush()
}

🚪 四、动态首页加载(基于角色跳转)

async function loadHomePageByRole() {
  const prefs = await preferences.getPreferences(getContext(globalThis), 'user_info')
  const role = await prefs.get('role', 'student')

  if (role === 'teacher') {
    router.replaceUrl({ url: 'pages/TeacherDashboard' })
  } else if (role === 'admin') {
    router.replaceUrl({ url: 'pages/AdminPanel' })
  } else {
    router.replaceUrl({ url: 'pages/StudentHome' })
  }
}

📌 建议在 aboutToAppear() 中调用,实现登录后自动跳转到正确入口。


🧩 五、组件级权限控制

例如某个操作按钮仅“教师”可见:

@State role: string = 'student'

Button('添加题目')
  .visibility(this.role === 'teacher' ? Visibility.Visible : Visibility.None)

✅ 页面内动态隐藏/显示内容,保护功能边界。


📚 六、推荐角色权限常量封装

export enum UserRole {
  STUDENT = 'student',
  TEACHER = 'teacher',
  ADMIN = 'admin'
}

export function hasAccess(role: string, required: UserRole[]): boolean {
  return required.includes(role as UserRole)
}

✅ 七、小结

能力点 实践说明
用户模型设计 数据库中区分 role 字段,支持多种身份切换
登录后跳转 根据角色动态跳转不同首页
页面内容权限控制 使用状态变量 + 显示控制限制组件可见性
角色常量封装 推荐使用枚举统一管理角色名称,减少字符串使用

📘 下一篇预告

第2篇|课程模块设计与实现:课程目录树 + 视频播放器 + 学习进度保存

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐