我在检测公司中的用户是否是管理员时遇到了一个小问题。 MS建议的方法是query for a role name“管理员”等。
但是问题在于,由于某种原因,角色名称似乎是已翻译,因此在不同语言中查询它有点困难,即什么是“管理员”现在可以是“администратор”。
*至少在不同版本的CRM上使用角色ID似乎也不起作用。
有没有人遇到过这样的事情? 非常感谢你的帮助!
答案 0 :(得分:5)
可以使用角色模板的ID来标识系统管理员角色。对于内置安全角色,Dynamics CRM系统共享相同的Guid
,因此您可以简单地对与语言无关的查询进行硬编码。
这是一个代码示例。 (在此示例中,_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;
}