电竞比分网-中国电竞赛事及体育赛事平台

分享

控制臺(tái)程序讀取Excel設(shè)置角色權(quán)限

 Coder編程 2020-09-08

摘要: 本人微信公眾號(hào):微軟動(dòng)態(tài)CRM專家羅勇 ,回復(fù)283或者20181118可方便獲取本文,同時(shí)可以在第一間得到我發(fā)布的最新博文信息,follow me!我的網(wǎng)站是 www.luoyong.me 。

在實(shí)體角色比較多的情況下手工設(shè)置權(quán)限麻煩,我這里開發(fā)了一個(gè)控制臺(tái)應(yīng)用程序,讀取前面博文 自定義控制臺(tái)程序?qū)С鼋巧珜?duì)實(shí)體的權(quán)限為Excel文件 導(dǎo)出并修改的角色對(duì)實(shí)體的權(quán)限來設(shè)置。

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},準(zhǔn)備提取{2}中的權(quán)限設(shè)置進(jìn)行處理,繼續(xù)操作請(qǐng)輸入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}個(gè)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; //行數(shù)
                                int colCount = xlRange.Columns.Count;//列數(shù)
                                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 處理創(chuàng)建權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的創(chuàng)建權(quán)限設(shè)置為空不需要處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                    }
                                    #endregion
                                    #region 處理讀權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的讀權(quán)限設(shè)置為空不需要處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                    }
                                    #endregion
                                    #region 處理寫權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的寫權(quán)限設(shè)置為空不需要處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                    }
                                    #endregion
                                    #region 處理刪除權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的刪除權(quán)限設(shè)置為空不需要處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                    }
                                    #endregion
                                    #region 處理追加權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的追加權(quán)限設(shè)置為空不需要處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                    }
                                    #endregion
                                    #region 處理追加到權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的追加到權(quán)限設(shè)置為空不需要處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                    }
                                    #endregion
                                    #region 處理分派權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的分派權(quán)限設(shè)置為空不需要處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                                    }
                                    #endregion
                                    #region 處理共享權(quán)限 
                                    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"://如果設(shè)置為0需要清除此權(quán)限
                                                        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("權(quán)限 - {0} 找不到!- {1}", privilegeName, DateTime.Now.ToString()));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine(string.Format("角色{0}的共享權(quán)限設(shè)置為空不需要處理!- {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} 權(quán)限處理完畢 - {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} 個(gè)權(quán)限處理完畢 - {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} 在根業(yè)務(wù)部門中找不到,不處理!- {1}", currentSheet.Name, DateTime.Now.ToString()));
                            }
                        }
                    }
                    finally
                    {
                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                        excelApp.Quit();
                        Marshal.ReleaseComObject(excelApp);
                    }
                }
            }
            Console.Write("程序執(zhí)行完畢!");
            Console.ReadKey();
        }

        /// <summary>
        /// 獲取現(xiàn)有權(quán)限信息
        /// </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("獲取現(xiàn)有權(quán)限信息成功,共獲取到 {0} 個(gè)權(quán)限 - {1}",returnVal.Count,DateTime.Now.ToString()));
            return returnVal;
         }

        /// <summary>
        /// 獲取根業(yè)務(wù)部門的GUID
        /// </summary>
        /// <param name="orgSvc">組織服務(wù)</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;
    }
}

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多