Flutter角色服务管理插件pip_services_roles的使用

Flutter角色服务管理插件pip_services_roles的使用

Pip.Services Logo

角色微服务

这是来自Pip.Services库的一个用户角色微服务。它为用户提供了一个基于角色的基本授权机制。

该微服务目前支持以下部署选项:

  • 部署平台:独立进程、Seneca
  • 外部API:HTTP/REST、Seneca
  • 持久化:平面文件、MongoDB

该微服务与其他微服务没有依赖关系。

快速链接

  • 下载链接
  • 开发指南
  • 配置指南
  • 部署指南
  • 客户端SDK
  • 通信协议
    • HTTP版本1

合同

以下是微服务的逻辑合同。对于物理实现(HTTP/REST),请参阅特定协议的文档。

class UserRolesV1 implements IStringIdentifiable {
  String id;
  List<String> roles;
  DateTime update_time;
}

abstract class IRolesV1 {
  Future<DataPage<UserRolesV1>> getRolesByFilter(
      String correlationId, FilterParams filter, PagingParams paging);

  Future<List<String>> getRolesById(String correlationId, String userId);

  Future<List<String>> setRoles(String correlationId, String userId, List<String> roles);

  Future<List<String>> grantRoles(String correlationId, String userId, List<String> roles);

  Future<List<String>> revokeRoles(String correlationId, String userId, List<String> roles);

  Future<bool> authorize(String correlationId, String userId, List<String> roles);
}

下载

目前唯一获取微服务的方式是从GitHub仓库直接检出。

git clone git@github.com:pip-services-users/pip-services-roles-dart.git

Pip.Service团队正在努力实现打包并使稳定发布版本可供下载。

运行

在微服务文件夹的根目录下添加config.yaml文件,并设置配置参数。

微服务配置示例:

---
# 容器描述符
- descriptor: "pip-services:context-info:default:default:1.0"
  name: "pip-services-roles"
  description: "Pip.Services的角色微服务"

# 控制台日志记录器
- descriptor: "pip-services:logger:console:default:1.0"
  level: "trace"

# 性能计数器,将值发布到日志
- descriptor: "pip-services:counters:log:default:1.0"
  level: "trace"

{{#MEMORY_ENABLED}}
# 内存持久化。仅用于测试!
- descriptor: "pip-services-roles:persistence:memory:default:1.0"
{{/MEMORY_ENABLED}}

{{#FILE_ENABLED}}
# 文件持久化。用于测试或简单的独立部署
- descriptor: "pip-services-roles:persistence:file:default:1.0"
  path: {{FILE_PATH}}{{^FILE_PATH}}"./data/roles.json"{{/FILE_PATH}}
{{/FILE_ENABLED}}

{{#MONGO_ENABLED}}
# MongoDB持久化
- descriptor: "pip-services-roles:persistence:mongodb:default:1.0"
  collection: {{MONGO_COLLECTION}}{{^MONGO_COLLECTION}}roles{{/MONGO_COLLECTION}}
  connection:
    uri: {{{MONGO_SERVICE_URI}}}
    host: {{{MONGO_SERVICE_HOST}}}{{^MONGO_SERVICE_HOST}}localhost{{/MONGO_SERVICE_HOST}}
    port: {{MONGO_SERVICE_PORT}}{{^MONGO_SERVICE_PORT}}27017{{/MONGO_SERVICE_PORT}}
    database: {{MONGO_DB}}{{#^MONGO_DB}}app{{/^MONGO_DB}}
  credential:
    username: {{MONGO_USER}}
    password: {{MONGO_PASS}}
{{/MONGO_ENABLED}}

{{^MEMORY_ENABLED}}{{^FILE_ENABLED}}{{^MONGO_ENABLED}}
# 默认内存储存
- descriptor: "pip-services-roles:persistence:memory:default:1.0"
{{/MONGO_ENABLED}}{{/FILE_ENABLED}}{{/MEMORY_ENABLED}}

# 默认控制器
- descriptor: "pip-services-roles:controller:default:default:1.0"

# 公共HTTP端点
- descriptor: "pip-services:endpoint:http:default:1.0"
  connection:
    protocol: "http"
    host: "0.0.0.0"
    port: 8080

# HTTP端点版本1.0
- descriptor: "pip-services-roles:service:http:default:1.0"

# 心跳服务
- descriptor: "pip-services:heartbeat-service:http:default:1.0"

# 状态服务
- descriptor: "pip-services:status-service:http:default:1.0"

有关微服务配置的更多信息,请参见配置指南。

使用以下命令启动微服务:

dart ./bin/run.dart

使用

与微服务交互最简单的方法是使用客户端SDK。完整的可用客户端SDK列表参见快速链接部分。

如果你使用的是Dart,那么需要引用所需的库:

添加以下包:

import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';

import 'package:pip_services_roles/pip_services_roles.dart';

定义与微服务外部API匹配的客户端配置参数:

// 客户端配置
var httpConfig = ConfigParams.fromTuples(
	"connection.protocol", "http",
	"connection.host", "localhost",
	"connection.port", 8080
);

实例化客户端并连接到微服务:

// 创建客户端实例
var client = RolesHttpClientV1(config);

// 配置客户端
client.configure(httpConfig);

// 连接到微服务
try{
  await client.open(null);
}catch() {
  // 错误处理...
}       
// 与微服务交互
// ...

现在客户端已准备好执行操作:

final ROLES = ['Role 1', 'Role 2', 'Role 3'];

    // 设置角色
    try {
      var role = await client.setRoles('123', '1', ROLES);
      // 对返回的角色进行处理...
    } catch(err) {
      // 错误处理...     
    }
// 通过ID获取角色
try {
var role = await client.getRolesById(
    null,
    '1');
    // 对角色进行处理...

    } catch(err) { // 错误处理}
// 授予用户角色
try {
var role = await client.grantRoles(
    null,
    '1',
    ['admin']);
    // 对角色进行处理...

    } catch(err) { // 错误处理}

// 授权用户
try {
var role = await client.authorize(
    null,
    '1',
    ['admin']);
    // 对布尔值(已授权或未授权)进行处理...

    } catch(err) { // 错误处理}    

更多关于Flutter角色服务管理插件pip_services_roles的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter角色服务管理插件pip_services_roles的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


pip_services_roles 是一个用于 Flutter 应用程序的角色和权限管理的插件。它可以帮助你轻松地管理用户角色、权限以及基于角色的访问控制。以下是如何在 Flutter 项目中使用 pip_services_roles 插件的步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 pip_services_roles 插件的依赖。

dependencies:
  pip_services_roles: ^1.0.0

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 pip_services_roles 插件。

import 'package:pip_services_roles/pip_services_roles.dart';

3. 创建角色和权限

你可以使用 Role 类来定义角色,并使用 Permission 类来定义权限。

Role adminRole = Role(
  id: 'admin',
  name: 'Administrator',
  permissions: [
    Permission(id: 'create_user', name: 'Create User'),
    Permission(id: 'delete_user', name: 'Delete User'),
  ],
);

Role userRole = Role(
  id: 'user',
  name: 'User',
  permissions: [
    Permission(id: 'view_profile', name: 'View Profile'),
  ],
);

4. 创建角色管理器

使用 RoleManager 类来管理角色和权限。

RoleManager roleManager = RoleManager();

roleManager.addRole(adminRole);
roleManager.addRole(userRole);

5. 检查权限

你可以使用 RoleManager 来检查用户是否具有特定的权限。

bool hasPermission = roleManager.hasPermission('admin', 'create_user');

if (hasPermission) {
  print('Admin can create users');
} else {
  print('Admin cannot create users');
}

6. 管理用户角色

你可以为用户分配角色,并检查用户是否具有某个角色。

User user = User(id: 'user1', roles: ['user']);

bool hasRole = roleManager.hasRole(user, 'admin');

if (hasRole) {
  print('User has admin role');
} else {
  print('User does not have admin role');
}

7. 基于角色的访问控制

你可以在应用程序中实现基于角色的访问控制逻辑。

void accessResource(User user, String resource) {
  if (roleManager.hasPermission(user.roles.first, resource)) {
    print('Access granted');
  } else {
    print('Access denied');
  }
}

accessResource(user, 'view_profile'); // Access granted
accessResource(user, 'delete_user');  // Access denied

8. 持久化和同步

pip_services_roles 还支持将角色和权限持久化到数据库或其他存储中。你可以根据需要使用 RolePersistence 类来实现这一点。

class MyRolePersistence extends RolePersistence {
  // Implement your persistence logic here
}

MyRolePersistence rolePersistence = MyRolePersistence();
rolePersistence.saveRole(adminRole);

9. 事件和日志

你还可以使用 RoleManager 的事件和日志功能来跟踪角色和权限的变化。

roleManager.onRoleAdded.listen((role) {
  print('Role added: ${role.name}');
});

roleManager.onPermissionAdded.listen((permission) {
  print('Permission added: ${permission.name}');
});
回到顶部