• Lv1
    粉丝0

积分2 / 贡献0

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

作者动态

    [经验分享] OpenHarmony简单验证rbac

    xr_xyg 显示全部楼层 发表于 2025-1-22 17:59:27
    # **如何使用OpenHarmony简单验证rbac角色管理**

    ## 开发环境搭建

    ### **安装 DevEco Studio**

    * 从 [OpenHarmony 官网](https://docs.openharmony.cn/pages/v4.1/zh-cn/release-notes/OpenHarmony-v4.0-release.md#%E9%85%8D%E5%A5%97%E5%85%B3%E7%B3%BB) 或 [HarmonyOS 官网](https://developer.huawei.com/consumer/cn/doc/harmonyos-releases-V2/harmonyos_release_3_1_202305-0000001582097989-V2) 下载 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](https://forums-obs.openharmony.cn/forum/202501/22/175135jghmvvjm9x7n7nnh.png "099fd3f3254ee4950e11213b3eb4fe25.png")

      ![4adadd5b81a9fe51578311560d8f063e.png](https://forums-obs.openharmony.cn/forum/202501/22/175151c4w0dgwo1q1p37wg.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](https://forums-obs.openharmony.cn/forum/202501/22/174252wj77s7p7maptmjxs.png "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](https://forums-obs.openharmony.cn/forum/202501/22/175211nr7h1buhpyphtmpr.png "1470c541b5af416ec26a3a45d45d6cd2.png")

    **启动模拟器**

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

      ![fb5dbd374192ba1b1405c0c47cedbc77.png](https://forums-obs.openharmony.cn/forum/202501/22/175427j09938ojw8k8jif8.png "fb5dbd374192ba1b1405c0c47cedbc77.png")

    **运行应用**

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

      ![a09e5378f0c607d64adc51899980d798.png](https://forums-obs.openharmony.cn/forum/202501/22/175444mdcw7n7lefp557p2.png "a09e5378f0c607d64adc51899980d798.png")

    ## 结论

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

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

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

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

    返回顶部