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

角色微服务
这是来自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,那么需要引用所需的库:
- Pip.Services3.Commons : https://github.com/pip-services3-dart/pip-services3-commons-dart
- Pip.Services3.Rpc: https://github.com/pip-services3-dart/pip-services3-rpc-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
更多关于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}');
});