• Lv1
    粉丝0

积分11 / 贡献0

提问0答案被采纳0文章4

作者动态

[其他] 使用OpenHarmony简单验证rbac角色管理

xr_xyg 显示全部楼层 发表于 2025-2-10 14:33:18

如何使用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 项目。

    099fd3f3254ee4950e11213b3eb4fe25.png

    4adadd5b81a9fe51578311560d8f063e.png

RBAC系统实现

项目结构

entry/src/main/ets/default 目录下创建一个 rbac 文件夹,用于存放 RBAC 相关代码

entry/
├── src/
│   ├── main/
│   │   ├── ets/
│   │   │   │── rbac/
│   │   │   │   ├── User.ts
│   │   │   │   ├── Role.ts
│   │   │   │   ├── Permission.ts
│   │   │   │   ├── RBAC.ts
│   │   │   │   ├── index.ts
│   │   │   ── pages/
│   │   │   │   ├── index.ets

a5a801caa53d173d8f7071a281096a20.png

定义 RBAC 数据结构

User.ts
// 定义用户类
import Role from './Role';

class User {
  id: number;
  username: string;
  roles: Role[] = [];

  constructor(id: number, username: string) {
    this.id = id;
    this.username = username;
  }

  addRole(role: Role) {
    this.roles.push(role);
  }
}

export default User;
Role.ts
// 定义角色类
import Permission from './Permission';

class Role {
  id: number;
  name: string;
  permissions: Permission[] = [];

  constructor(id: number, name: string) {
    this.id = id;
    this.name = name;
  }

  addPermission(permission: Permission) {
    this.permissions.push(permission);
  }
}

export default Role;
Permission.ts
// 定义权限类
class Permission {
  id: number;
  name: string;

  constructor(id: number, name: string) {
    this.id = id;
    this.name = name;
  }
}

export default Permission;
RBAC.ts
// RBAC.ts
import User from "./User";
import Role from "./Role";
import Permission from "./Permission";

export const users: User[] = []; // 导出users数组
export const roles: Role[] = [];
export const permissions: Permission[] = [];

export function initializeData() {
  const readPermission = new Permission(1, "READ");
  const writePermission = new Permission(2, "WRITE");
  permissions.push(readPermission, writePermission);

  const adminRole = new Role(1, "Admin");
  const userRole = new Role(2, "User");

  adminRole.addPermission(readPermission);
  adminRole.addPermission(writePermission);
  userRole.addPermission(readPermission);

  roles.push(adminRole, userRole);

  const adminUser = new User(1, "admin");
  const normalUser = new User(2, "user");

  adminUser.addRole(adminRole);
  normalUser.addRole(userRole);

  users.push(adminUser, normalUser);
}

export function hasPermission(user: User, permissionName: string): boolean {
  for (const role of user.roles) {
    for (const permission of role.permissions) {
      if (permission.name === permissionName) {
        return true;
      }
    }
  }
  return false;
}
index.ts
// RBAC模块的入口文件
export * from "./User";
export * from "./Role";
export * from "./Permission";
export * from "./RBAC";

在主页面中调用 RBAC 模块

pages/index.ets
// index.ets
import { initializeData, hasPermission, users } from "../rbac";

initializeData();

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text(`Admin has READ permission: ${hasPermission(users.find(user => user.username === "admin")!, "READ")}`)//True
        .fontSize(20)
        .textAlign(TextAlign.Center)
      Text(`Admin has WRITE permission: ${hasPermission(users.find(user => user.username === "admin")!, "WRITE")}`)//True
        .fontSize(20)
        .textAlign(TextAlign.Center)
      Text(`User has READ permission: ${hasPermission(users.find(user => user.username === "user")!, "READ")}`)//True
        .fontSize(20)
        .textAlign(TextAlign.Center)
      Text(`User has WRITE permission: ${hasPermission(users.find(user => user.username === "user")!, "WRITE")}`)//False
        .fontSize(20)
        .textAlign(TextAlign.Center)
    }
    .width("100%")
    .height("100%")
  }
}

运行与测试

运行项目

  • 在 DevEco Studio 中,点击 Run 按钮运行项目。
  • 选择目标设备(如模拟器或真机)。

安装模拟器

  • 打开 DevEco Studio,点击“Tools” > “Device Manager”。

  • 在“Device Manager”中,点击“New Emulator”按钮创建新的模拟器。

  • 选择设备模板(如“Huawei_Phone”),并根据需要配置模拟器参数(如内存大小)。

  • 点击“Next”并完成模拟器镜像的下载。

    1470c541b5af416ec26a3a45d45d6cd2.png

启动模拟器

  • 在“Device Manager”中,选择已创建的模拟器,点击“启动”按钮。

  • 模拟器启动后,等待其完全加载并显示桌面。

    fb5dbd374192ba1b1405c0c47cedbc77.png

运行应用

  • 在 DevEco Studio 中,选择目标模拟器作为运行设备。

  • 点击工具栏中的“Run”按钮(绿色三角形),编译并部署应用到模拟器。

  • 应用将在模拟器上启动并运行。

    a09e5378f0c607d64adc51899980d798.png

结论

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

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部