none
Felder nur von bestimmten Rollen bearbeiten lassen RRS feed

  • Frage

  • Hallo Zusammen,

    ich habe bestimmt Felder in einem Reiter die ich nur von bestimmten Rollen bearbeiten lassen möchte.
    Das heist z.b. das Feld "Strasse" in der Entität Kontakt möchte ich das es nur von der Rolle xyz bearbeitet werden darf.

    Ich habe z.b. einen Kontakt Herrn Müller wo der Besitzer der Herr Maier ist der die Rolle Vertrieb hat. Rein von den Rollen her darf nur der Herr Maier im Kontakt was bearbeiten.

    Nun soll aber der Herr Rügen der die Rolle Disposition hat aber auch was bearbeiten dürfen. Aber z.b. nur die Strasse nicht alle Felder im Kontakt.

    Wie bekomme ich das hin ?

     

    MfG

     

    Isirider

     

    Donnerstag, 17. Juni 2010 12:10

Antworten

  • Hallo Isirider,

    du musst hierzu im OnLoad die Benutzerrollen des aktuellen Benutzers herausfinden und dann die entsprechenden Felder ausblenden lassen.

    Das Bearbeiten kannst du mit der IsDisabled-Eigenschaft beeinflussen, das mit den Benutzerrollen bekommst du folgendermaßen heraus:

    http://jianwang.blogspot.com/2008/01/crm-40-check-current-users-security.html

    //check if the current user has the 'System Administrator' role

    alert(UserHasRole("System Administrator"));

     

    function UserHasRole(roleName)

    {

     //get Current User Roles, oXml is an object

     var oXml = GetCurrentUserRoles();

     if(oXml != null)

     {

      //select the node text

      var roles = oXml.selectNodes("//BusinessEntity/q1:name");

      if(roles != null)

      {

       for( i = 0; i < roles.length; i++)

       {

        if(roles[i].text == roleName)

        {

         //return true if user has this role

         return true;

        }

       }

      }

     }

     //otherwise return false

     return false;

    }

     

    function GetCurrentUserRoles()

    {

     var xml = "" +

     "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +

     "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +

     GenerateAuthenticationHeader() +

     " <soap:Body>" +

     " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +

     " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +

     " <q1:EntityName>role</q1:EntityName>" +

     " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +

     " <q1:Attributes>" +

     " <q1:Attribute>name</q1:Attribute>" +

     " </q1:Attributes>" +

     " </q1:ColumnSet>" +

     " <q1:Distinct>false</q1:Distinct>" +

     " <q1:LinkEntities>" +

     " <q1:LinkEntity>" +

     " <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>" +

     " <q1:LinkFromEntityName>role</q1:LinkFromEntityName>" +

     " <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>" +

     " <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>" +

     " <q1:JoinOperator>Inner</q1:JoinOperator>" +

     " <q1:LinkEntities>" +

     " <q1:LinkEntity>" +

     " <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +

     " <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>" +

     " <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>" +

     " <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>" +

     " <q1:JoinOperator>Inner</q1:JoinOperator>" +

     " <q1:LinkCriteria>" +

     " <q1:FilterOperator>And</q1:FilterOperator>" +

     " <q1:Conditions>" +

     " <q1:Condition>" +

     " <q1:AttributeName>systemuserid</q1:AttributeName>" +

     " <q1:Operator>EqualUserId</q1:Operator>" +

     " </q1:Condition>" +

     " </q1:Conditions>" +

     " </q1:LinkCriteria>" +

     " </q1:LinkEntity>" +

     " </q1:LinkEntities>" +

     " </q1:LinkEntity>" +

     " </q1:LinkEntities>" +

     " </query>" +

     " </RetrieveMultiple>" +

     " </soap:Body>" +

     "</soap:Envelope>" +

     "";

     

     var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

     

     xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);

     xmlHttpRequest.setRequestHeader("SOAPAction"," http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");

     xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

     xmlHttpRequest.setRequestHeader("Content-Length", xml.length);

     xmlHttpRequest.send(xml);

     

     var resultXml = xmlHttpRequest.responseXML;

     return(resultXml);

    }

     

    Viele Grüße,
    Jürgen


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Donnerstag, 17. Juni 2010 12:17
    Moderator
  • Hi,

    bei der Lösung ist allerdings zu beachten, dass es sich nicht um eine 100%-Lösung handelt. Es wird nur verhindert, dass der Benutzer über das normale Formular editieren kann. Sobald man Schreibrechte auf den Datensatz hat, kann man auch über andere Wege den Datensatz ändern (per SDK, Excel-Import, ...). 

    Dynamics CRM kennt kein Field-Level-Security (siehe auch http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=471f8670-47b3-4525-b25d-c11a6774615c)

    • Als Antwort markiert Michael Sulz Freitag, 18. Juni 2010 06:21
    Donnerstag, 17. Juni 2010 17:15

Alle Antworten

  • Hallo Isirider,

    du musst hierzu im OnLoad die Benutzerrollen des aktuellen Benutzers herausfinden und dann die entsprechenden Felder ausblenden lassen.

    Das Bearbeiten kannst du mit der IsDisabled-Eigenschaft beeinflussen, das mit den Benutzerrollen bekommst du folgendermaßen heraus:

    http://jianwang.blogspot.com/2008/01/crm-40-check-current-users-security.html

    //check if the current user has the 'System Administrator' role

    alert(UserHasRole("System Administrator"));

     

    function UserHasRole(roleName)

    {

     //get Current User Roles, oXml is an object

     var oXml = GetCurrentUserRoles();

     if(oXml != null)

     {

      //select the node text

      var roles = oXml.selectNodes("//BusinessEntity/q1:name");

      if(roles != null)

      {

       for( i = 0; i < roles.length; i++)

       {

        if(roles[i].text == roleName)

        {

         //return true if user has this role

         return true;

        }

       }

      }

     }

     //otherwise return false

     return false;

    }

     

    function GetCurrentUserRoles()

    {

     var xml = "" +

     "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +

     "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +

     GenerateAuthenticationHeader() +

     " <soap:Body>" +

     " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +

     " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +

     " <q1:EntityName>role</q1:EntityName>" +

     " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +

     " <q1:Attributes>" +

     " <q1:Attribute>name</q1:Attribute>" +

     " </q1:Attributes>" +

     " </q1:ColumnSet>" +

     " <q1:Distinct>false</q1:Distinct>" +

     " <q1:LinkEntities>" +

     " <q1:LinkEntity>" +

     " <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>" +

     " <q1:LinkFromEntityName>role</q1:LinkFromEntityName>" +

     " <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>" +

     " <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>" +

     " <q1:JoinOperator>Inner</q1:JoinOperator>" +

     " <q1:LinkEntities>" +

     " <q1:LinkEntity>" +

     " <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +

     " <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>" +

     " <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>" +

     " <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>" +

     " <q1:JoinOperator>Inner</q1:JoinOperator>" +

     " <q1:LinkCriteria>" +

     " <q1:FilterOperator>And</q1:FilterOperator>" +

     " <q1:Conditions>" +

     " <q1:Condition>" +

     " <q1:AttributeName>systemuserid</q1:AttributeName>" +

     " <q1:Operator>EqualUserId</q1:Operator>" +

     " </q1:Condition>" +

     " </q1:Conditions>" +

     " </q1:LinkCriteria>" +

     " </q1:LinkEntity>" +

     " </q1:LinkEntities>" +

     " </q1:LinkEntity>" +

     " </q1:LinkEntities>" +

     " </query>" +

     " </RetrieveMultiple>" +

     " </soap:Body>" +

     "</soap:Envelope>" +

     "";

     

     var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

     

     xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);

     xmlHttpRequest.setRequestHeader("SOAPAction"," http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");

     xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

     xmlHttpRequest.setRequestHeader("Content-Length", xml.length);

     xmlHttpRequest.send(xml);

     

     var resultXml = xmlHttpRequest.responseXML;

     return(resultXml);

    }

     

    Viele Grüße,
    Jürgen


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Donnerstag, 17. Juni 2010 12:17
    Moderator
  • Hallo Jürgen,

     

    vielen Dank. Das ist genau das was ich brauche.

    Schönen Tag noch.

     

    Isirider

    Donnerstag, 17. Juni 2010 13:38
  • Hi,

    bei der Lösung ist allerdings zu beachten, dass es sich nicht um eine 100%-Lösung handelt. Es wird nur verhindert, dass der Benutzer über das normale Formular editieren kann. Sobald man Schreibrechte auf den Datensatz hat, kann man auch über andere Wege den Datensatz ändern (per SDK, Excel-Import, ...). 

    Dynamics CRM kennt kein Field-Level-Security (siehe auch http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=471f8670-47b3-4525-b25d-c11a6774615c)

    • Als Antwort markiert Michael Sulz Freitag, 18. Juni 2010 06:21
    Donnerstag, 17. Juni 2010 17:15
  • Das ist richtig. Mit dem Skript findest du das nur auf dem Formular selbst heraus.

    In dem von ckeller angefügten Dokument, steht übrigens, wie man das 100% sicher machen kann. CRM kennt zwar im Standard keine Field-Level-Security, aber man kann diese CRM prima beibringen. Kann ich aus eigener Erfahrung bestätigen.


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Donnerstag, 24. Juni 2010 21:23
    Moderator