用户角色与权限设计实战:学生、教师与管理员多角色体系搭建 HarmonyOS 5.0.0 或以上
·
适配版本: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篇|课程模块设计与实现:课程目录树 + 视频播放器 + 学习进度保存
更多推荐



所有评论(0)