【问题标题】:Set secured field in javascript according to general attribute根据通用属性在javascript中设置安全字段
【发布时间】:2021-03-01 23:19:15
【问题描述】:

我的任务是:如果记录的所有者正在加载表单,则没有任何变化,但如果不是记录的所有者正在加载表单,则 X 字段必须是“安全字段”(可以看到该字段而不是表单上的值和不在高级搜索中) - 有可能吗?我不确定这是否可能,因为在高级搜索中它不会查看记录的所有者数据。

我想到的一个解决方案是,在加载表单时,我将检查用户是否是所有者,如果是,我会给他一个安全角色或将他添加到对我的安全字段具有权限的团队中,是这听起来合乎逻辑?
有没有其他方法可以解决这种情况?

【问题讨论】:

  • 你试过了吗?

标签: dynamics-crm dynamics-crm-2016 xrm


【解决方案1】:

我认为这应该可行。请尝试一下。

  • 设置 Retrieve 和 RetrieveMultiple 插件
  • 设置插件以当前用户身份运行
  • 在插件代码中,如果当前用户和所有者不同,只需从指定字段中删除值即可。

注意

  • 检索插件适用于表单。
  • RetrieveMultiple 插件适用于高级查找和视图。
  • 在 google 上查找 Retrieve 和 RetrieveMultiple 插件的示例插件代码。根据您的上述要求进行修改。

【讨论】:

    【解决方案2】:

    这是一个棘手的要求,因为我们需要为该属性启用字段级别的安全性,并基于记录(所有者)中的某些字段值 - 用户将可以访问受保护的字段。但通常 FLS 会授予在 FLS 配置文件中配置的一组用户/团队的权限。我们不能为每条记录创建一个团队,访问团队不能用于此,安全角色在这种情况下没有帮助。

    Similar topic discussed 在社区论坛上和this blog post 谈论使用 sdk 调用来利用“共享安全字段”功能。

    您可以在插件/工作流程/Javascript 中使用类似的 sn-p 在创建/更新时与所有者共享。这将在表单、高级查找和任何地方都有效。

    Entity poaa = new Entity("principalobjectattributeaccess");
     poaa["attributeid"] = attributeResponse.AttributeMetadata.MetadataId;
     poaa["objectid"] = new EntityReference(entityName, objectId);
     poaa["readaccess"] = allowRead;
     poaa["updateaccess"] = allowUpdate;
     if (shareWithTeam)
     {
     poaa["principalid"] = new EntityReference("team", principalId);
     }
     else
     {
     poaa["principalid"] = new EntityReference("systemuser", principalId);
     }
     
    service.Create(poaa);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多