zoukankan      html  css  js  c++  java
  • 控制台程序读取Excel设置角色权限

    摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复283或者20181118可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me 。

    在实体角色比较多的情况下手工设置权限麻烦,我这里开发了一个控制台应用程序,读取前面博文 自定义控制台程序导出角色对实体的权限为Excel文件 导出并修改的角色对实体的权限来设置。

    using Microsoft.Crm.Sdk.Messages;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Client;
    using Microsoft.Xrm.Sdk.Query;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.ServiceModel.Description;
    using Excel = Microsoft.Office.Interop.Excel;
    
    namespace SetRolePrivileges
    {
        class Program
        {
            static void Main(string[] args)
            {
                IServiceManagement<IOrganizationService> orgServiceMgr = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(ConfigurationManager.AppSettings["orgUrl"]));
                AuthenticationCredentials orgAuCredentials = new AuthenticationCredentials();
                orgAuCredentials.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["userName"];
                orgAuCredentials.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["passWord"];
                string readFrom = ConfigurationManager.AppSettings["ReadFrom"];
                Privilege privilege = new Privilege();
                PrivilegeDataRow privilegeDataRow = new PrivilegeDataRow();
                List<PrivilegeDataRow> lstPrivilegeDataRow = new List<PrivilegeDataRow>();
                List<Privilege> lstPrivileges = new List<Privilege>();
                Dictionary<Guid, string> roles = new Dictionary<Guid, string>();
                string privilegeName = string.Empty;
                Guid roleId = Guid.Empty;
                List<RolePrivilege> addRolePrivileges = new List<RolePrivilege>();
                List<RolePrivilege> removeRolePrivileges = new List<RolePrivilege>();
                using (OrganizationServiceProxy orgSvc = GetProxy<IOrganizationService, OrganizationServiceProxy>(orgServiceMgr, orgAuCredentials))
                {
                    WhoAmIRequest whoReq = new WhoAmIRequest();
                    WhoAmIResponse whoRep = orgSvc.Execute(whoReq) as WhoAmIResponse;
                    var userEntity = orgSvc.Retrieve("systemuser", whoRep.UserId, new ColumnSet("fullname"));
                    Console.WriteLine(string.Format("登录组织{0}成功,欢迎{1},准备提取{2}中的权限设置进行处理,继续操作请输入y!", ConfigurationManager.AppSettings["orgUrl"], userEntity.GetAttributeValue<string>("fullname"), readFrom));
                    var input = Console.ReadLine().ToString().ToUpper();
                    if (input == "Y")
                    {
                        Console.WriteLine(string.Format("程序开始处理 - {0}", DateTime.Now.ToString()));
                        lstPrivileges = GetPrivileges(orgSvc);
                        roles = GetRoleList(orgSvc);
                        var excelApp = new Excel.Application();
                        excelApp.Visible = false;
                        Excel.Workbook rolePrivilegesWB = excelApp.Workbooks.Open(readFrom);
                        try
                        {
                            int worksheetcount = rolePrivilegesWB.Worksheets.Count;
                            Console.WriteLine(string.Format("读取的Workbook中共有{0}个Worksheet.", worksheetcount));
                            for (var i = 1; i < rolePrivilegesWB.Worksheets.Count; i++)
                            {
                                Excel._Worksheet currentSheet = rolePrivilegesWB.Sheets[i];
                                Console.WriteLine(string.Format("开始处理角色 - {0} - {1}", currentSheet.Name, DateTime.Now.ToString()));
                                if (roles.Where(t => t.Value == currentSheet.Name).Count() >= 1)
                                {
                                    roleId = roles.Where(t => t.Value == currentSheet.Name).FirstOrDefault().Key;
                                    Excel.Range xlRange = currentSheet.UsedRange;
                                    int rowCount = xlRange.Rows.Count; //行数
                                    int colCount = xlRange.Columns.Count;//列数
                                    for (int j = 2; j <= rowCount; j++)
                                    {
                                        privilegeDataRow = new PrivilegeDataRow();
                                        //if (xlRange.Cells[j, k] != null && xlRange.Cells[j, k].Value2 != null) //判断单元格字段值是否为空
                                        privilegeDataRow.SchemaName = xlRange.Cells[j, 1].Value2;
                                        if(privilegeDataRow.SchemaName == "ActivityPointer")
                                        {
                                            privilegeDataRow.SchemaName = "Activity";
                                        }
                                        if (privilegeDataRow.SchemaName == "SystemUser")
                                        {
                                            privilegeDataRow.SchemaName = "User";
                                        }
                                        privilegeDataRow.DisplayName = xlRange.Cells[j, 2].Value2;
                                        privilegeDataRow.CreatePrivilege = xlRange.Cells[j, 3].Value2 == null?string.Empty: Convert.ToString(xlRange.Cells[j, 3].Value2);
                                        privilegeDataRow.ReadPrivilege = xlRange.Cells[j, 4].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, 4].Value2);
                                        privilegeDataRow.WritePrivilege = xlRange.Cells[j, 5].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, 5].Value2);
                                        privilegeDataRow.DeletePrivilege = xlRange.Cells[j, 6].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, 6].Value2);
                                        privilegeDataRow.AppendPrivilege = xlRange.Cells[j, 7].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, 7].Value2);
                                        privilegeDataRow.AppendToPrivilege = xlRange.Cells[j, 8].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, 8].Value2);
                                        privilegeDataRow.AssignPrivilege = xlRange.Cells[j, 9].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, 9].Value2);
                                        privilegeDataRow.SharePrivilege = xlRange.Cells[j, 10].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, 10].Value2);
                                        lstPrivilegeDataRow.Add(privilegeDataRow);
                                    }
                                    foreach (var item in lstPrivilegeDataRow)
                                    {
                                        #region 处理创建权限 
                                        if (!string.IsNullOrEmpty(item.CreatePrivilege))
                                        {
                                            privilegeName = string.Format("prvCreate{0}", item.SchemaName);
                                            if (item.CreatePrivilege.Trim() == "0"
                                                || item.CreatePrivilege.Trim() == "1"
                                                || item.CreatePrivilege.Trim() == "2"
                                                || item.CreatePrivilege.Trim() == "3"
                                                || item.CreatePrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.CreatePrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的创建权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
                                        #region 处理读权限 
                                        if (!string.IsNullOrEmpty(item.ReadPrivilege))
                                        {
                                            privilegeName = string.Format("prvRead{0}", item.SchemaName);
                                            if (item.ReadPrivilege.Trim() == "0"
                                                || item.ReadPrivilege.Trim() == "1"
                                                || item.ReadPrivilege.Trim() == "2"
                                                || item.ReadPrivilege.Trim() == "3"
                                                || item.ReadPrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.ReadPrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的读权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
                                        #region 处理写权限 
                                        if (!string.IsNullOrEmpty(item.WritePrivilege))
                                        {
                                            privilegeName = string.Format("prvWrite{0}", item.SchemaName);
                                            if (item.WritePrivilege.Trim() == "0"
                                                || item.WritePrivilege.Trim() == "1"
                                                || item.WritePrivilege.Trim() == "2"
                                                || item.WritePrivilege.Trim() == "3"
                                                || item.WritePrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.WritePrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的写权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
                                        #region 处理删除权限 
                                        if (!string.IsNullOrEmpty(item.DeletePrivilege))
                                        {
                                            privilegeName = string.Format("prvDelete{0}", item.SchemaName);
                                            if (item.DeletePrivilege.Trim() == "0"
                                                || item.DeletePrivilege.Trim() == "1"
                                                || item.DeletePrivilege.Trim() == "2"
                                                || item.DeletePrivilege.Trim() == "3"
                                                || item.DeletePrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.DeletePrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的删除权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
                                        #region 处理追加权限 
                                        if (!string.IsNullOrEmpty(item.AppendPrivilege))
                                        {
                                            privilegeName = string.Format("prvAppend{0}", item.SchemaName);
                                            if (item.AppendPrivilege.Trim() == "0"
                                                || item.AppendPrivilege.Trim() == "1"
                                                || item.AppendPrivilege.Trim() == "2"
                                                || item.AppendPrivilege.Trim() == "3"
                                                || item.AppendPrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.AppendPrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的追加权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
                                        #region 处理追加到权限 
                                        if (!string.IsNullOrEmpty(item.AppendToPrivilege))
                                        {
                                            privilegeName = string.Format("prvAppendTo{0}", item.SchemaName);
                                            if (item.AppendToPrivilege.Trim() == "0"
                                                || item.AppendToPrivilege.Trim() == "1"
                                                || item.AppendToPrivilege.Trim() == "2"
                                                || item.AppendToPrivilege.Trim() == "3"
                                                || item.AppendToPrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.AppendToPrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的追加到权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
                                        #region 处理分派权限 
                                        if (!string.IsNullOrEmpty(item.AssignPrivilege))
                                        {
                                            privilegeName = string.Format("prvAssign{0}", item.SchemaName);
                                            if (item.AssignPrivilege.Trim() == "0"
                                                || item.AssignPrivilege.Trim() == "1"
                                                || item.AssignPrivilege.Trim() == "2"
                                                || item.AssignPrivilege.Trim() == "3"
                                                || item.AssignPrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.AssignPrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的分派权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
                                        #region 处理共享权限 
                                        if (!string.IsNullOrEmpty(item.SharePrivilege))
                                        {
                                            privilegeName = string.Format("prvShare{0}", item.SchemaName);
                                            if (item.SharePrivilege.Trim() == "0"
                                                || item.SharePrivilege.Trim() == "1"
                                                || item.SharePrivilege.Trim() == "2"
                                                || item.SharePrivilege.Trim() == "3"
                                                || item.SharePrivilege.Trim() == "4")
                                            {
                                                if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= 1)
                                                {
                                                    privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
                                                    switch (item.SharePrivilege.Trim())
                                                    {
                                                        case "0"://如果设置为0需要清除此权限
                                                            removeRolePrivileges.Add(new RolePrivilege()
                                                            {
                                                                PrivilegeId = privilege.PrivilegeId
                                                            });
                                                            break;
                                                        case "1":
                                                            if (privilege.CanBeBasic)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Basic
                                                                });
                                                            }
                                                            break;
                                                        case "2":
                                                            if (privilege.CanBeLocal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Local
                                                                });
                                                            }
                                                            break;
                                                        case "3":
                                                            if (privilege.CanBeDeep)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Deep
                                                                });
                                                            }
                                                            break;
                                                        case "4":
                                                            if (privilege.CanBeGlobal)
                                                            {
                                                                addRolePrivileges.Add(new RolePrivilege()
                                                                {
                                                                    PrivilegeId = privilege.PrivilegeId,
                                                                    Depth = PrivilegeDepth.Global
                                                                });
                                                            }
                                                            break;
                                                    }
    
                                                }
                                                else
                                                {
                                                    Console.WriteLine(string.Format("权限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine(string.Format("角色{0}的共享权限设置为空不需要处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                        }
                                        #endregion
    
                                        if (removeRolePrivileges.Count >= 1)
                                        {
                                            removeRolePrivileges.ForEach(x =>
                                            {
                                                RemovePrivilegeRoleRequest removePrivilegesRequest = new RemovePrivilegeRoleRequest
                                                {
                                                    RoleId = roleId,
                                                    PrivilegeId = x.PrivilegeId
                                                };
                                                orgSvc.Execute(removePrivilegesRequest);
                                                Console.WriteLine(string.Format("移除角色 - {0} 的 {1} 权限处理完毕 - {2}", currentSheet.Name, x.PrivilegeId, DateTime.Now.ToString()));
                                            });
                                        }
                                        if (addRolePrivileges.Count >= 1)
                                        {
                                            AddPrivilegesRoleRequest addPrivilegesRequest = new AddPrivilegesRoleRequest
                                            {
                                                RoleId = roleId,
                                                Privileges = addRolePrivileges.ToArray()
                                            };
                                            orgSvc.Execute(addPrivilegesRequest);
                                            Console.WriteLine(string.Format("添加角色 - {0} 的 {1} 个权限处理完毕 - {2}", currentSheet.Name, addRolePrivileges.Count, DateTime.Now.ToString()));
                                        }
                                        removeRolePrivileges.Clear();
                                        addRolePrivileges.Clear();
                                    }
                                    lstPrivilegeDataRow.Clear();
                                    Console.WriteLine(string.Format("角色 - {0} 处理完毕 - {1}", currentSheet.Name, DateTime.Now.ToString()));
                                }
                                else
                                {
                                    Console.WriteLine(string.Format("角色 - {0} 在根业务部门中找不到,不处理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                }
                            }
                        }
                        finally
                        {
                            GC.Collect();
                            GC.WaitForPendingFinalizers();
                            excelApp.Quit();
                            Marshal.ReleaseComObject(excelApp);
                        }
                    }
                }
                Console.Write("程序执行完毕!");
                Console.ReadKey();
            }
    
            /// <summary>
            /// 获取现有权限信息
            /// </summary>
            /// <param name="orgSvc"></param>
            /// <returns></returns>
            private static List<Privilege> GetPrivileges(OrganizationServiceProxy orgSvc)
            {
                List<Privilege> returnVal = new List<Privilege>();
                Privilege privilege = new Privilege();
                string fetchXml = string.Format(@"<fetch version='1.0' mapping='logical' distinct='false' no-lock='true'>
        <entity name='privilege'>
            <attribute name='privilegeid'/>
            <attribute name='name'/>
            <attribute name='canbebasic'/>
            <attribute name='canbedeep'/>
            <attribute name='canbeglobal'/>
            <attribute name='canbelocal'/>
       </entity>
    </fetch>");
                foreach (var item in orgSvc.RetrieveMultiple(new FetchExpression(fetchXml)).Entities)
                {
                    privilege = new Privilege();
                    privilege.PrivilegeId = item.GetAttributeValue<Guid>("privilegeid");
                    privilege.Name = item.GetAttributeValue<string>("name");
                    privilege.CanBeBasic = item.GetAttributeValue<bool>("canbebasic");
                    privilege.CanBeLocal = item.GetAttributeValue<bool>("canbelocal");
                    privilege.CanBeDeep = item.GetAttributeValue<bool>("canbedeep");
                    privilege.CanBeGlobal = item.GetAttributeValue<bool>("canbeglobal");
                    privilege.AccessRight = item.GetAttributeValue<int>("accessright");
                    returnVal.Add(privilege);
                }
                Console.WriteLine(string.Format("获取现有权限信息成功,共获取到 {0} 个权限 - {1}",returnVal.Count,DateTime.Now.ToString()));
                return returnVal;
             }
    
            /// <summary>
            /// 获取根业务部门的GUID
            /// </summary>
            /// <param name="orgSvc">组织服务</param>
            /// <returns></returns>
            private static Guid GetRootBUId(OrganizationServiceProxy orgSvc)
            {
                Guid returnVal = Guid.Empty;
                string fetchXml = @"<fetch version='1.0' mapping='logical' distinct='false' count='1' no-lock='true'>
      <entity name='businessunit'>
        <attribute name='businessunitid' />
        <filter type='and'>
          <condition attribute='parentbusinessunitid' operator='null' />
        </filter>
      </entity>
    </fetch>";
                var buEntities = orgSvc.RetrieveMultiple(new FetchExpression(fetchXml));
                if (buEntities.Entities.Count >= 1)
                {
                    returnVal = buEntities.Entities[0].GetAttributeValue<Guid>("businessunitid");
                }
                return returnVal;
            }
    
            /// <summary>
            /// 获得角色列表
            /// </summary>
            /// <param name="orgSvc"></param>
            /// <returns></returns>
            private static Dictionary<Guid, string> GetRoleList(OrganizationServiceProxy orgSvc)
            {
                Dictionary<Guid, string> returnVal = new Dictionary<Guid, string>();
                var rootBuId = GetRootBUId(orgSvc);
                string fetchXml = string.Format(@"<fetch version='1.0' no-lock='true' mapping='logical' distinct='false'>
      <entity name='role'>
        <attribute name='name' />
        <attribute name='roleid' />
        <filter type='and'>
          <condition attribute='businessunitid' operator='eq' value='{0}' />
        </filter>
      </entity>
    </fetch>", rootBuId);
                foreach (var item in orgSvc.RetrieveMultiple(new FetchExpression(fetchXml)).Entities)
                {
                    var roleName = item.GetAttributeValue<string>("name");
    
                    returnVal.Add(item.GetAttributeValue<Guid>("roleid"), roleName);
                }
                return returnVal;
            }
    
            private static TProxy GetProxy<TService, TProxy>(
    IServiceManagement<TService> serviceManagement,
    AuthenticationCredentials authCredentials)
                where TService : class
                where TProxy : ServiceProxy<TService>
            {
                Type classType = typeof(TProxy);
    
                if (serviceManagement.AuthenticationType !=
                    AuthenticationProviderType.ActiveDirectory)
                {
                    AuthenticationCredentials tokenCredentials =
                        serviceManagement.Authenticate(authCredentials);
                    return (TProxy)classType
                        .GetConstructor(new Type[] { typeof(IServiceManagement<TService>), typeof(SecurityTokenResponse) })
                        .Invoke(new object[] { serviceManagement, tokenCredentials.SecurityTokenResponse });
                }
                return (TProxy)classType
                    .GetConstructor(new Type[] { typeof(IServiceManagement<TService>), typeof(ClientCredentials) })
                    .Invoke(new object[] { serviceManagement, authCredentials.ClientCredentials });
            }
        }
    
        class Privilege
        {
            public Guid PrivilegeId;
            public string Name;
            public bool CanBeBasic;
            public bool CanBeDeep;
            public bool CanBeGlobal;
            public bool CanBeLocal;
            public int AccessRight;
        }
    
        class PrivilegeDataRow
        {
            public string SchemaName;
            public string DisplayName;
            public string CreatePrivilege;
            public string ReadPrivilege;
            public string WritePrivilege;
            public string DeletePrivilege;
            public string AppendPrivilege;
            public string AppendToPrivilege;
            public string AssignPrivilege;
            public string SharePrivilege;
        }
    }
  • 相关阅读:
    Android 5.0以下系统支持TLS 1.1/1.2协议版本
    Java & Android未捕获异常处理机制
    Oppo Reno2 不允许安装非正式签名应用
    Android ADB 实用总结
    Android Studio中的非项目文件及项目目录下的全局搜索
    Android开发中网络代理设置实用总结
    基于时间偏差思路下的时间周期度量
    nodejs anywhere 搭建本地静态文件服务
    Android 支持库迁移到AndroidX
    项目Gradle版本从4.4升级到4.6
  • 原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Set_Role_Privileges_According_to_Excel.html
Copyright © 2011-2022 走看看