控制台程序读取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 = ; 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() >= )
{
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 = ; j <= rowCount; j++)
{
privilegeDataRow = new PrivilegeDataRow();
//if (xlRange.Cells[j, k] != null && xlRange.Cells[j, k].Value2 != null) //判断单元格字段值是否为空
privilegeDataRow.SchemaName = xlRange.Cells[j, ].Value2;
if(privilegeDataRow.SchemaName == "ActivityPointer")
{
privilegeDataRow.SchemaName = "Activity";
}
if (privilegeDataRow.SchemaName == "SystemUser")
{
privilegeDataRow.SchemaName = "User";
}
privilegeDataRow.DisplayName = xlRange.Cells[j, ].Value2;
privilegeDataRow.CreatePrivilege = xlRange.Cells[j, ].Value2 == null?string.Empty: Convert.ToString(xlRange.Cells[j, ].Value2);
privilegeDataRow.ReadPrivilege = xlRange.Cells[j, ].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, ].Value2);
privilegeDataRow.WritePrivilege = xlRange.Cells[j, ].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, ].Value2);
privilegeDataRow.DeletePrivilege = xlRange.Cells[j, ].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, ].Value2);
privilegeDataRow.AppendPrivilege = xlRange.Cells[j, ].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, ].Value2);
privilegeDataRow.AppendToPrivilege = xlRange.Cells[j, ].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, ].Value2);
privilegeDataRow.AssignPrivilege = xlRange.Cells[j, ].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, ].Value2);
privilegeDataRow.SharePrivilege = xlRange.Cells[j, ].Value2 == null ? string.Empty : Convert.ToString(xlRange.Cells[j, ].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() == ""
|| item.CreatePrivilege.Trim() == ""
|| item.CreatePrivilege.Trim() == ""
|| item.CreatePrivilege.Trim() == ""
|| item.CreatePrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.CreatePrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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() == ""
|| item.ReadPrivilege.Trim() == ""
|| item.ReadPrivilege.Trim() == ""
|| item.ReadPrivilege.Trim() == ""
|| item.ReadPrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.ReadPrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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() == ""
|| item.WritePrivilege.Trim() == ""
|| item.WritePrivilege.Trim() == ""
|| item.WritePrivilege.Trim() == ""
|| item.WritePrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.WritePrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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() == ""
|| item.DeletePrivilege.Trim() == ""
|| item.DeletePrivilege.Trim() == ""
|| item.DeletePrivilege.Trim() == ""
|| item.DeletePrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.DeletePrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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() == ""
|| item.AppendPrivilege.Trim() == ""
|| item.AppendPrivilege.Trim() == ""
|| item.AppendPrivilege.Trim() == ""
|| item.AppendPrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.AppendPrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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() == ""
|| item.AppendToPrivilege.Trim() == ""
|| item.AppendToPrivilege.Trim() == ""
|| item.AppendToPrivilege.Trim() == ""
|| item.AppendToPrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.AppendToPrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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() == ""
|| item.AssignPrivilege.Trim() == ""
|| item.AssignPrivilege.Trim() == ""
|| item.AssignPrivilege.Trim() == ""
|| item.AssignPrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.AssignPrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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() == ""
|| item.SharePrivilege.Trim() == ""
|| item.SharePrivilege.Trim() == ""
|| item.SharePrivilege.Trim() == ""
|| item.SharePrivilege.Trim() == "")
{
if (lstPrivileges.Where(t => t.Name == privilegeName).Count() >= )
{
privilege = lstPrivileges.Where(t => t.Name == privilegeName).First();
switch (item.SharePrivilege.Trim())
{
case ""://如果设置为0需要清除此权限
removeRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId
});
break;
case "":
if (privilege.CanBeBasic)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Basic
});
}
break;
case "":
if (privilege.CanBeLocal)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Local
});
}
break;
case "":
if (privilege.CanBeDeep)
{
addRolePrivileges.Add(new RolePrivilege()
{
PrivilegeId = privilege.PrivilegeId,
Depth = PrivilegeDepth.Deep
});
}
break;
case "":
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 >= )
{
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 >= )
{
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 >= )
{
returnVal = buEntities.Entities[].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;
}
}
控制台程序读取Excel设置角色权限的更多相关文章
- 基于.NET的程序读取Excel文件的解决方案
目录 0. 前言 1. 使用NPOI库读取Excel文件 2. 使用OleDbConnection 3. 相关参考 shanzm-2020年12月8日 23:48:11 0. 前言 以前基于 .NET ...
- C#读取Excel设置(亲测可用)
OpenFileDialog openFD = new OpenFileDialog(); openFD.FileName = ""; openFD.Filter = " ...
- springboot 控制台程序读取配置文件(原创)
首先新建一个springboot项目,此处省略. 1.新建一个application.properties person.name=kevin person.age=6 person.sex=male ...
- 控制台程序读取WIKI形式的TXT文件并一表格的形式显示在Word中
'Imports System.Collections.Generic 'Imports System.Text 'Imports System.IO 'Imports office = Micros ...
- C#控制台程序读取项目中文件路径
//使用appdomain获取当前应用程序集的执行目录 string dir = AppDomain.CurrentDomain.BaseDirectory; //使用path获取当前应用程序集的执行 ...
- [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity
项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理9
前两天因有事就没来得及写.今天刚刚好空了.这次写的是对角色和管理员对页面按钮之间的控制.先看页面效果 说明:先根据角色设置好角色的权限,然后管理员在对应的角色下的权限去设置其权限. 在设置角色权限的时 ...
- ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(3)
接下来完成用户.角色的增删查改,以及用户角色.权限的设置 对用户表.角色表做了一些扩展如下[可以更加自己需要增减字段] 相应的M_UserProfile.cs.M_Roles.cs进行扩展 using ...
- 自定义控制台程序导出角色对实体的权限为Excel文件
本人微信公众号:微软动态CRM专家罗勇 ,回复282或者20181116可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 先上 ...
随机推荐
- 对JS闭包和函数作用域的问题的深入讨论,如何理解JS闭包和函数作用域链?
首先先引用<JavaScript权威指南>里面的一句话来开始我的博客:函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的. 因此,就出现了如下的几串代码: ...
- Java中的锁——Lock和synchronized
上一篇Java中的队列同步器AQS 一.Lock接口 1.Lock接口和synchronized内置锁 a)synchronized:Java提供的内置锁机制,Java中的每个对象都可以用作一个实现同 ...
- Javascript中的this关键字用法详解
在javascript里面,this是一个特殊的对象,它不像其他编程语言那样,是存储在实例中的值,直接指向此实例. 而是作为一个单独的指针,在不同的情况之下,指向不同的位置,这也是为什么我们会将它搞混 ...
- Django中使用geetest实现滑动验证
下载第三方模块 导入模块social-auth-app-django 和geetest 提前去官网下载gt.js或者引入http://static.geetest.com/static/tools/g ...
- Spring中你可能不知道的事(二)
在上一节中,我介绍了Spring中极为重要的BeanPostProcessor BeanFactoryPostProcessor Import ImportSelector,还介绍了一些其他的零碎知识 ...
- C++中int与string的转化
C++中int与string的转化 int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释.缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀, ...
- 从锅炉工到AI专家(10)
RNN循环神经网络(Recurrent Neural Network) 如同word2vec中提到的,很多数据的原型,前后之间是存在关联性的.关联性的打破必然造成关键指征的丢失,从而在后续的训练和预测 ...
- CPU的load和使用率傻傻分不清
1. 什么是Cpu的Load 使用uptime.top或者查看/proc/loadavg都可以看到CPU的load统计,这里有三个值,分别代表1分钟.5分钟和15分钟的CPU Load情况.大部分人认 ...
- 什么?你竟然还没有用这几个chrome插件?
前言 其实18年之前写过一篇关于chrome插件的文章,里面安利了4个chrome插件.鉴于这已经是9102年了,之前觉得好用的chrome插件跟新了解到的比起来,还是差了那么点味道.所以决定再更新一 ...
- Chapter 5 Blood Type——25
"I usually am — but about what in particular this time?" “我通常都是 —— 但是这次有什么特殊的吗?” "Dit ...