场景说明:

1.在使用 CRM 系统时,经常会有需要在某个 Entity 下对其他 Entity 的 Record 进行更新,或者在 post 中对自身进行更新,这里就需要用到 SDK 上的 update() 方法(或者 updateObject() 方法),但是执行 update 方法时,需要 User 对要进行更新的 Entity 拥有 Assign to 的权限;

2.由于 CRM 系统可以对 User 进行权限配置,所以 User 可能不具备对应 Entity 的 Assign to 权限,现在要求在不改动 User 的权限配置的基础上,对 Entity 进行更新(执行 update)。

基于以上两点,我们可以在 Plugin 里用 System Administrator 来执行更新操作,方法有以下两种:

解决方案一:

用Linq(或者其他方式)查询拥有管理员角色的用户 ID,并用其执行 update:

using (OrganizationServiceContext orgService = new OrganizationServiceContext(service))
{
var systemUserId = (from userrole in orgService.CreateQuery<Entities.SystemUserRoles>()
join role in orgService.CreateQuery<Entities.Role>()
on userrole.RoleId equals role.Id
where role.Name == "System Administrator"
select userrole.SystemUserId).FirstOrDefault(); if (systemUserId != null)
{
IOrganizationService SystemService = factory.CreateOrganizationService(systemUserId);
SystemService.Update(new_entity);
}//end if systemUserId != null
}

这种通过联合系统用户角色查询,来获取管理员角色用户 ID 的方法存在一个很大的缺点:就是如果当前用户没有权限读取对应表的权限时,无法获得管理员角色用户的 ID,会导致代码没有执行到 update 操作。这里这是列出这种方法,并不推荐使用。

解决方案二:

不通过查询管理员角色用户 ID 的方法,直接在 CreateOrganizationService() 的时候传一个参数 null,它会直接以管理员等级来创建服务。

IOrganizationService SystemService = factory.CreateOrganizationService(null);
SystemService.Update(new_entity);

推荐使用这种方法来执行 update 操作,就不会因为权限问题导致所需的更新失效。

最新文章

  1. Grunt安装配置教程:前端自动化工作流
  2. MyEclipse转换Eclipse项目无法启动问题(转)
  3. SICP 换零钱的迭代版本
  4. 博弈的SG函数理解及模板
  5. .NET 操作PDF文档以及PDF文件打印摸索总结
  6. Windows 10 代理上网用户的正确使用姿势
  7. 红豆带你从零学C#系列之:开始C#编程(一)
  8. html学习笔记二
  9. easyui项目问题集锦
  10. 原生JS实现图片放大镜插件
  11. Canvas的drawImage方法使用
  12. SQL优化 MySQL版 -分析explain SQL执行计划与Type级别详解
  13. HTML常用知识点代码演示
  14. 简单翻书效果,css3 3d视角perspective
  15. java中级——集合框架【1】-ArrayList
  16. sublime 3插件推荐
  17. SharePoint Server 2013安装
  18. 0003python中的可变参数
  19. JavaScript:传对象数组到后台
  20. System、应用程序进程的Binder线程池和Handler消息循环

热门文章

  1. Golang的运算符-赋值运算符
  2. 2.11 学习总结 之 ajax
  3. 每天一点点之python - 基础语法
  4. 修改序列(Sequence)的初始值(START WITH)
  5. Meeloun教你如何正式切入Essay写作话题
  6. Elasticsearch 批处理
  7. RabbitMQ系列文章
  8. vue 循环和v-if 不能混合使用
  9. UVA - 11892 ENimEN(博弈)
  10. 使用FragmentStatePagerAdapter时发现的内存泄露问题