我正在开发 MS CRM 插件,它应该能够确定当前用户是否具有对当前实体的写入权限。我不知道如何处理这项任务。
似乎目前不支持完成此任务的最用户友好的方式。
除了编写 FetchXML 查询并解析其输出之外,MS CRM 2011 SDK 中还有其他选择吗?
我正在开发 MS CRM 插件,它应该能够确定当前用户是否具有对当前实体的写入权限。我不知道如何处理这项任务。
似乎目前不支持完成此任务的最用户友好的方式。
除了编写 FetchXML 查询并解析其输出之外,MS CRM 2011 SDK 中还有其他选择吗?
这是我想出的——这段代码将检查当前用户是否已授予当前记录的权限:
// Requesting user's access rights to current record
var principalAccessRequest = new RetrievePrincipalAccessRequest
{
Principal = new EntityReference("systemuser", localContext.PluginExecutionContext.UserId),
Target = new EntityReference(localContext.PluginExecutionContext.PrimaryEntityName, localContext.PluginExecutionContext.PrimaryEntityId)
};
// Response will contain AccessRights mask, like AccessRights.WriteAccess | AccessRights.ReadAccess | ...
var principalAccessResponse = (RetrievePrincipalAccessResponse)localContext.OrganizationService.Execute(principalAccessRequest);
if ((principalAccessResponse.AccessRights & AccessRights.WriteAccess) != AccessRights.None)
{
...
...
...
}
如果用户必须当前记录,if
则将执行语句内部的代码。WriteAccess
According to Matt's Answer:
You have just have to perform the joins and add the where clause you care about. Here is the Equivalent SQL:
SELECT Privilege.*
FROM Privilege
INNER JOIN RolePrivilege ON Privilege.PrivilegeId = RolePrivilege.PrivilegeId
INNER JOIN SystemUserRole ON SystemUserRole.RoleId = RolePrivileges.RoleId AND SystemUserRole.SystemUserId = (user's GUID)
-- WHERE Add whatever constraints on the Privilege entity that you need
You can perform this using Fetch XML, or LINQ to CRM, or Query Expressions, or even OData.