Blackpearl 的 Impersonate
时间:2022-04-25
本文章向大家介绍Blackpearl 的 Impersonate,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Blackpearl的Connection方法 Impersonate(string name)。这个就是传说中的后门方法,它可以帮你模拟任何一个帐号(域用户或者数据库用户),来做他可以做得事情。当然,你必须在WorkSpace中设置操作这个命令的权限。
以下代码将给用户设置Impersonate权限,包装成一个Job来定时运行就可以了:
WorkflowManagementServer managementServer = new WorkflowManagementServer();
managementServer.CreateConnection();
managementServer.Connection.Open(GetConnectionString(dataMap));
AdminPermissions adminPerms = managementServer.GetAdminPermissions();
AdminPermissions newAdminPerms = new AdminPermissions();
StaffCollection staffs = Staff.GetAllStaff();
foreach (AdminPermission item in adminPerms)
{
var staffName = item.UserName.Replace("K2SQL:","").Trim();
Staff staff = staffs.Find(t => t.EnglishName == staffName );
if (staff != null)
{
newAdminPerms.Add(item);
staffs.Remove(staff);
}
else
{
if (item.UserName.ToUpper().Contains("K2:TENCENT"))
{
newAdminPerms.Add(item);
}
}
}
foreach (var item in staffs)
{
AdminPermission adminPermission = new AdminPermission();
adminPermission.CanImpersonate = true;
adminPermission.UserName = string.Format("K2SQL:{0}", item.EnglishName);
newAdminPerms.Add(adminPermission);
}
managementServer.UpdateAdminUsers(newAdminPerms);
Impersonate方法的调用可以参照K2 blackpearl Client Impersonation - Suggested Design Pattern包装后使用,下面是我的包装代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SourceCode.Workflow.Client;
using Tencent.OA.Framework.Workflow.Interfaces;
namespace Tencent.OA.Framework.Workflow
{
/// <summary>
/// <example>
///IK2Connection k2Conn = K2Factory.NewK2Connection("oa-flowdb");;
///using(Impersonation.Impersonate(userName, k2Conn)
///{
/// //Do whatever work you need to do as the impersonated user
///}
/// </example>
/// </summary>
public class Impersonation : IDisposable
{
private IK2Connection _conn = null;
private Impersonation(IK2Connection conn)
{
_conn = conn;
}
#region Impersonate Methods
/// <summary>
/// 模拟用户
/// </summary>
/// <param name="userName">用户英文名</param>
/// <param name="conn">代表K2服务器链接</param>
/// <returns></returns>
public static Impersonation Impersonate(string userName, IK2Connection conn)
{
if (!userName.ToUpper().Contains("K2SQL"))
{
userName = string.Format("K2SQL:{0}", userName);
}
conn.Connection.ImpersonateUser(userName);
return new Impersonation(conn);
}
#endregion Impersonate Methods
#region IDisposable Members
/// <summary>
/// 取消用户的模拟
/// </summary>
public void Dispose()
{
_conn.Connection.RevertUser();
}
#endregion
}
}
- Spring Boot 中使用 Kafka
- 如何评价一段代码
- java系统高并发的解决方案
- Spring Boot 中使用 Redis
- 使用 Jedis 连接操作 Redis
- 浅析ReDoS的原理与实践
- 使用 Executors,ThreadPoolExecutor,创建线程池,源码分析理解
- CentOS+Nginx+Tomcat搭建高性能负载均衡集群
- Java 四种线程池的使用
- 搭建 Jenkins-2.83 服务,部署 spring boot 项目
- Spring Boot 中使用 Java API 调用 lucene
- Spring Boot 中使用 Java API 调用 Elasticsearch
- Spring Boot 中使用 公共配置
- WebView 和 JS 交互,如何将 Java 对象和 List 传值给 JS ?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- HBase监控
- CVPR19-Deep Stacked Hierarchical Multi-patch Network for Image Deblurring
- HTTP缓存机制与Cookie
- 52. Vue使用watch监听网页的URL变化
- 如何设计一个秒杀系统
- SQL注入之dns回显注入
- 只要一行代码,实现五种 CSS 经典布局
- Flutter-引入第三方依赖包
- Hive操作——删除表(drop、truncate)
- 如何搭建redis集群 --- redis-cluster
- IO之Standard IO
- XSS原理详解
- IO之Formatted IO
- 51. Vue名称案例-使用watch监听数据变化
- 安装KubeSphere