Blackpearl 的 Impersonate

来源:互联网 发布:软件培训价格 编辑:程序博客网 时间:2024/05/16 23:10

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
    }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗躺着不动了怎么办 一岁宝宝很粘人怎么办 宝宝脸冻了怎么办 婴儿特别粘人怎么办 宝宝说话结巴了怎么办 三岁半宝宝突然口吃怎么办 两岁半宝宝突然口吃怎么办 小孩说话突然结巴怎么办 一岁半宝宝黏人怎么办 2岁宝宝总爱抱怎么办 宝宝受风寒呕吐怎么办 4岁宝宝太粘人怎么办? 宝宝特别黏妈妈怎么办 两岁宝宝总让抱怎么办 两岁宝宝要抱睡怎么办 两岁宝宝老让抱怎么办 孩子说话突然结巴怎么办 6岁幼儿爱哭怎么办 刚上幼儿园爱哭怎么办 四岁宝宝结巴怎么办 孩子突然变结巴怎么办 小孩精神性尿频怎么办 小孩睡觉前尿频怎么办 生僻字打不出来怎么办 名字里有生僻字怎么办 qq语音红包生僻字怎么办 生僻字上不了户口怎么办 7岁儿童结巴怎么办 小孩咳喘有痰怎么办 都说我不爱说话怎么办 宝宝突然结巴了怎么办 淘宝客户不理人怎么办 遇到不说话客户怎么办 同学群没人聊怎么办 群里没人说话怎么办 儿童说话声音沙哑怎么办 孩子不和外人说话怎么办 同学退群该怎么办 宝宝睡觉枕头湿怎么办 一个多月的小宝宝便秘怎么办 小宝宝便秘拉屎困难怎么办