OpenHarmony开发者论坛

标题: OpenHarmony简单验证rbac [打印本页]

作者: xr_xyg    时间: 2025-1-22 17:59
标题: OpenHarmony简单验证rbac
# **如何使用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 系统。





欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5