如何通过 SDK 检测用户在 MS Dynamics CRM 中是否具有管理员角色?
How to detect a user is has administrator role in MS Dynamics CRM via SDK?
我在检测公司用户是否为管理员时遇到了一个小问题。 MS 建议的方法是 query for a role name "administrator" 等
但是 问题是,由于某种原因,角色名称似乎是 translated,所以这有点困难用不同的语言查询它,即 "administrator" 现在可以是“администратор”。
*使用角色 ID 似乎也不起作用,至少在不同版本的 CRM 上是这样。
有没有人遇到过这样的事情?
非常感谢您的帮助!
系统管理员角色可以通过角色模板的ID来识别。对于 built-in 安全角色,Dynamics CRM 系统都共享相同的 Guid
,因此您可以简单地对 language-agnostic 查询进行硬编码。
这里是代码示例。 (在此示例中,_service 应该是一个实现 IOrganizationService
接口的对象。)
private static readonly Guid AdminRoleTemplateId = new Guid("627090FF-40A3-4053-8790-584EDC5BE201");
public bool HavingAdminRole(Guid systemUserId)
{
var query = new QueryExpression("role");
query.Criteria.AddCondition("roletemplateid", ConditionOperator.Equal, AdminRoleTemplateId);
var link = query.AddLink("systemuserroles", "roleid", "roleid");
link.LinkCriteria.AddCondition("systemuserid", ConditionOperator.Equal, systemUserId);
return _service.RetrieveMultiple(query).Entities.Count > 0;
}
我在检测公司用户是否为管理员时遇到了一个小问题。 MS 建议的方法是 query for a role name "administrator" 等
但是 问题是,由于某种原因,角色名称似乎是 translated,所以这有点困难用不同的语言查询它,即 "administrator" 现在可以是“администратор”。
*使用角色 ID 似乎也不起作用,至少在不同版本的 CRM 上是这样。
有没有人遇到过这样的事情? 非常感谢您的帮助!
系统管理员角色可以通过角色模板的ID来识别。对于 built-in 安全角色,Dynamics CRM 系统都共享相同的 Guid
,因此您可以简单地对 language-agnostic 查询进行硬编码。
这里是代码示例。 (在此示例中,_service 应该是一个实现 IOrganizationService
接口的对象。)
private static readonly Guid AdminRoleTemplateId = new Guid("627090FF-40A3-4053-8790-584EDC5BE201");
public bool HavingAdminRole(Guid systemUserId)
{
var query = new QueryExpression("role");
query.Criteria.AddCondition("roletemplateid", ConditionOperator.Equal, AdminRoleTemplateId);
var link = query.AddLink("systemuserroles", "roleid", "roleid");
link.LinkCriteria.AddCondition("systemuserid", ConditionOperator.Equal, systemUserId);
return _service.RetrieveMultiple(query).Entities.Count > 0;
}