查看: 74|回复: 0

使用OpenHarmony简单验证rbac角色管理

[复制链接]

1

主题

2

回帖

15

积分

新手上路

积分
15
发表于 2025-4-13 08:40:26 | 显示全部楼层 |阅读模式
如何使用OpenHarmony简单验证rbac角色管理

开发环境搭建

安装 DevEco Studio

    从 OpenHarmony 官网 或 HarmonyOS 官网 下载 DevEco Studio。安装时选择合适的版本(本篇文章使用的是 DevEco Studio 4.0 release),并确保安装路径中不包含中文。
安装 Node.js 和 ohpm

    DevEco Studio 会自动检测并提示安装 Node.js 和 ohpm(OpenHarmony 的包管理工具)。安装路径建议避开 C 盘。
配置 OpenHarmony SDK

    打开 DevEco Studio,进入 SDK Manager,切换到 OpenHarmony SDK 并下载所需的 API 版本(本篇文章使用的是API 9)。确保 SDK 的安装路径与 HarmonyOS SDK 不同。
创建项目

    打开 DevEco Studio,选择 Create Project,选择 [OpenHarmony] Empty Ability 模板,创建一个新的 OpenHarmony 项目。


RBAC系统实现

项目结构

在 entry/src/main/ets/default 目录下创建一个 rbac 文件夹,用于存放 RBAC 相关代码
  1. entry/
  2. ├── src/
  3. │   ├── main/
  4. │   │   ├── ets/
  5. │   │   │   │── rbac/
  6. │   │   │   │   ├── User.ts
  7. │   │   │   │   ├── Role.ts
  8. │   │   │   │   ├── Permission.ts
  9. │   │   │   │   ├── RBAC.ts
  10. │   │   │   │   ├── index.ts
  11. │   │   │   ── pages/
  12. │   │   │   │   ├── index.ets
复制代码
定义 RBAC 数据结构

User.ts
  1. // 定义用户类
  2. import Role from './Role';
  3. class User {
  4.   id: number;
  5.   username: string;
  6.   roles: Role[] = [];
  7.   constructor(id: number, username: string) {
  8.     this.id = id;
  9.     this.username = username;
  10.   }
  11.   addRole(role: Role) {
  12.     this.roles.push(role);
  13.   }
  14. }
  15. export default User;
复制代码
Role.ts
  1. // 定义角色类
  2. import Permission from './Permission';
  3. class Role {
  4.   id: number;
  5.   name: string;
  6.   permissions: Permission[] = [];
  7.   constructor(id: number, name: string) {
  8.     this.id = id;
  9.     this.name = name;
  10.   }
  11.   addPermission(permission: Permission) {
  12.     this.permissions.push(permission);
  13.   }
  14. }
  15. export default Role;
复制代码
Permission.ts
  1. // 定义权限类
  2. class Permission {
  3.   id: number;
  4.   name: string;
  5.   constructor(id: number, name: string) {
  6.     this.id = id;
  7.     this.name = name;
  8.   }
  9. }
  10. export default Permission;
复制代码
RBAC.ts
  1. // RBAC.ts
  2. import User from "./User";
  3. import Role from "./Role";
  4. import Permission from "./Permission";
  5. export const users: User[] = []; // 导出users数组
  6. export const roles: Role[] = [];
  7. export const permissions: Permission[] = [];
  8. export function initializeData() {
  9.   const readPermission = new Permission(1, "READ");
  10.   const writePermission = new Permission(2, "WRITE");
  11.   permissions.push(readPermission, writePermission);
  12.   const adminRole = new Role(1, "Admin");
  13.   const userRole = new Role(2, "User");
  14.   adminRole.addPermission(readPermission);
  15.   adminRole.addPermission(writePermission);
  16.   userRole.addPermission(readPermission);
  17.   roles.push(adminRole, userRole);
  18.   const adminUser = new User(1, "admin");
  19.   const normalUser = new User(2, "user");
  20.   adminUser.addRole(adminRole);
  21.   normalUser.addRole(userRole);
  22.   users.push(adminUser, normalUser);
  23. }
  24. export function hasPermission(user: User, permissionName: string): boolean {
  25.   for (const role of user.roles) {
  26.     for (const permission of role.permissions) {
  27.       if (permission.name === permissionName) {
  28.         return true;
  29.       }
  30.     }
  31.   }
  32.   return false;
  33. }
复制代码
index.ts
  1. // RBAC模块的入口文件
  2. export * from "./User";
  3. export * from "./Role";
  4. export * from "./Permission";
  5. export * from "./RBAC";
复制代码
在主页面中调用 RBAC 模块

pages/index.ets
  1. // index.ets
  2. import { initializeData, hasPermission, users } from "../rbac";
  3. initializeData();
  4. @Entry
  5. @Component
  6. struct Index {
  7.   build() {
  8.     Column() {
  9.       Text(`Admin has READ permission: ${hasPermission(users.find(user => user.username === "admin")!, "READ")}`)//True
  10.         .fontSize(20)
  11.         .textAlign(TextAlign.Center)
  12.       Text(`Admin has WRITE permission: ${hasPermission(users.find(user => user.username === "admin")!, "WRITE")}`)//True
  13.         .fontSize(20)
  14.         .textAlign(TextAlign.Center)
  15.       Text(`User has READ permission: ${hasPermission(users.find(user => user.username === "user")!, "READ")}`)//True
  16.         .fontSize(20)
  17.         .textAlign(TextAlign.Center)
  18.       Text(`User has WRITE permission: ${hasPermission(users.find(user => user.username === "user")!, "WRITE")}`)//False
  19.         .fontSize(20)
  20.         .textAlign(TextAlign.Center)
  21.     }
  22.     .width("100%")
  23.     .height("100%")
  24.   }
  25. }
复制代码
运行与测试

运行项目

    在 DevEco Studio 中,点击 Run 按钮运行项目。选择目标设备(如模拟器或真机)。
安装模拟器
    打开 DevEco Studio,点击“Tools” > “Device Manager”。
    在“Device Manager”中,点击“New Emulator”按钮创建新的模拟器。
    选择设备模板(如“Huawei_Phone”),并根据需要配置模拟器参数(如内存大小)。
    点击“Next”并完成模拟器镜像的下载。

启动模拟器
    在“Device Manager”中,选择已创建的模拟器,点击“启动”按钮。
    模拟器启动后,等待其完全加载并显示桌面。

运行应用
    在 DevEco Studio 中,选择目标模拟器作为运行设备。
    点击工具栏中的“Run”按钮(绿色三角形),编译并部署应用到模拟器。
    应用将在模拟器上启动并运行。

结论

模拟器应用中的输出结果和pages/index.ts中预设的结果一致,测试通过,验证可以在 DevEco Studio 中实现并测试 OpenHarmony 的 RBAC 系统。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表