【问题标题】:Microsoft Dynamic CRM 2011: Field Level Security for specific Security Roles and Owner of an AccountMicrosoft Dynamic CRM 2011:特定安全角色和帐户所有者的字段级安全性
【发布时间】:2013-06-05 03:25:29
【问题描述】:

我的公司正在使用 Microsoft Dynamic CRM 2011 并希望自定义一些功能。如下所述的自定义:

“有账号密码栏(用于登录我们公司网站)。密码仅对帐户所有者、销售经理或销售管理员可见。”

我该怎么做,MSCRM 2011 中的 Field Security 似乎只支持用户和团队。请告诉我该怎么做(甚至通过编程)。

【问题讨论】:

    标签: dynamics-crm-2011


    【解决方案1】:

    字段安全性非常适合特定角色(销售经理等),但不适用于“上下文感知”场景,例如记录所有者。

    最好的办法是为密码创建一个自定义实体,使主要字段(默认名称)不是业务必需的。

    创建与 Account 的 N:1 关系,将关系设为“Parental”,并将查找字段设为 Business Required。 您现在将在帐户的左侧导航中看到“密码”。

    编辑密码表单以查找帐户,并为密码本身添加文本字段,并使“名称”字段默认不可见,因此您可以忽略它。

    创建安全角色(或编辑现有角色)以授予用户级别的密码访问权限,以读取、创建、更新、分配和附加权限。修改销售经理角色以允许读取所有密码记录。

    父母关系意味着如果重新分配帐户,则子密码记录也将如此。 但是,有人可以创建密码记录(因此他们拥有它)并将其链接到一个帐户(甚至可能是他们不拥有的帐户),而无需更改所有者以匹配父级。因此,在密码记录创建、重新父级或重新分配上创建一个工作流,这会将所有者更改为与父级帐户相同的帐户以整理这种情况。

    编辑密码的关联视图以显示密码字段。根据需要编辑其他视图。 (如果您真的想直接在 Account 表单上显示密码,请使用内联网格集以使用最少的空间,没有视图选择器等。但实际上仍然占用太多空间。)

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      这可以通过使用 javascript 来实现。

      首先,将密码字段设置为默认不可见 - 这将阻止它最初出现,以便没有权限的用户可能会看到它(即使是短暂的)。

      其次,提供一个javascript函数来查找登录用户的角色。有很多方法可以做到这一点,每种方法都有自己的优点和缺点。这个link 有多种使用方式。

      第三,使用此函数和一些额外的 javascript 来检查所有者字段以使该字段可见/不可见。

      举个例子:

      function CanUserSeePassword() {
          var loggedInUserGuid = USER_ID;//USER_ID is built in CRM constant
          if (RetrieveUserRoles(loggedInUserGuid)) {
              SetPasswordFieldVisibility(true);
          }
          else {
              var ownerGuid = Xrm.Page.getAttribute('ownerid').getValue()[0].id;
              SetPasswordFieldVisibility(ownerGuid == USER_ID);
          }
      }
      
      function SetPasswordFieldVisibility(isVisible) {
          Xrm.Page.getAttribute('new_password').setVisible(isVisible);
      } 
      
      function RetrieveUserRoles() {
          //use code from link above to return a bool, either user is in appropriate security role, or is not
      }
      

      有点粗糙'n'准备好了,但会完成工作。

      【讨论】:

      • ...并且不会阻止用户在表单以外的任何地方查看密码值 - 有人可以轻松创建高级查找查询并包含一列以查看所有密码。一点都不理想。
      • 一个公平的观点,尽管您可以轻松地将字段设置为对高级查找不可见。我不确定这个问题如何不适用于您的以下解决方案?
      • 您可以使字段不可搜索,因此它不能用于高级查找查询(如果您愿意,可以添加“where”部分)但可以添加所有列(“select...”部分),这是无法控制的。在我的解决方案中,用户只能访问他们拥有的密码记录,并且他们可以看到所有字段。在他们不拥有的记录上,他们什么也看不到,甚至没有记录存在。销售经理可以看到所有内容,因为他们的角色不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多