none
IMPEDINDO QUE UM CAMPO SEJA ACESSADO NA LOCALIZAÇ ÃO AVANÇADA RRS feed

  • Pergunta

  • Boa noite,

    eu encontrei nas propriedade dos atributos uma opção que se deve marcar para que este seja mostrado no filtro da pesquisa avançada, gostaria de uma ajuda para colocar isso em um java script para que quando um usuário qeu não tiver permissão de acesso a este campo não o possa ver e nem selecionalo na localização avançada.  Verificar o usuário eu ja sei so naum sei como alterar esta propriedade do compoente se alguem souber por favor me ajude. Preciso habilitala e desabilitála de acordo como o usuário logado no sistema.

    att.

    Tiago H.

    sexta-feira, 16 de abril de 2010 00:59

Respostas

  • Olá Tiago,

    Embora possamos fazer várias coisas com JScript, algumas delas não são contempladas no modelo de arquitetura do CRM, entre elas o permissionamento.

    A propriedade que você mencionou serve para disponibilizar ou não o atributo nas consultas, apenas isso. O CRM só consegue garantir privacidade da informação se as permissões forem feitas através da sua console de segurança. Qualquer workaround não será garantido, entende?

    Exemplificando, imagine que você consiga de alguma forma o que pretende com um JScript, ok? Ainda assim, não terá plena certeza de que os usuários não conseguirão ver a informação, pois eles poderão ter acesso ao assistente de relatórios(onde podem listar o atributo), ao SQL Server como usuários de autenticação integrada(que podem fazer um select contra o banco), a um workflow(que pode mandar por email a informação), etc. Percebe como essa saída é passível de falhas?

    Agora se você definir que o usuário não tem permissão, aí sim! Mesmo que consiga visualizar o atributo na localização avançada, não conseguirá vê-lo, pois não possui privilégios para isso.

    []´s


    Carlos Amorim Junior
    "Já ajudou a comunidade hoje?"
    http://www.dynamicscrm.com.br
    quarta-feira, 28 de abril de 2010 19:13

Todas as Respostas

  • Boa tarde Thiago.

     

    Não seria mais fácil fazer esse permissionamento pelo Direito de Acesso do usuário ou de um determinado grupo de usuário?

    Assim aquele determinado grupo não terá a visualização da entidade. Acredito que fique mais fácil.

     

    Att.

    sexta-feira, 16 de abril de 2010 18:58
  • Use essa função para pegar a unidade de negócio do seu usuário e com ela habilite ou desabilite o campo desejado.

     

    // Coloca na variavel status o resultado do usuario, se ele é agente local ou não. (true ou false)
    var status = UserHasRole("Nome da função");

    if(status == true)
    {
    //se for "nome da função"..

    }

    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;
    //alert(resultXml.xml);
     return(resultXml);
    }

     

    Att

    sexta-feira, 16 de abril de 2010 19:09
  • W.Meier

     

    Esta função acima pega a função do usuario, preciso saber a qual unidade de negocio ele pertence?

    E habilitar e desabilitar a propiedade pesquisa do atributo para que esse nao possa ser visto ou pesquisado pelos usuarios de uma determinada entidade.

    Visto que todos os outros campos sao publicos porem alguns campos expecificos desta mesma entidade não porem ser vistos por todas as outras unidades.

     

    Eu e Tiago trabalhamos juntos e estamos precisando dessa solução.

    sexta-feira, 16 de abril de 2010 20:16
  • Pera pegar a Unidade de negócio dele, troque o nome da entidade na consulta xml.

    referenciando a entidade "role" o script retorna a função do usuário, se trocarmos pela "businessunit" (Unidade de negócio) nao retornaria a unidade de negócio da pessoa logada?

    Para habiliatar e desabilitar campos.

    // desabilita o campo 
    [nomeDoCampo].Disabled = true; 
     
    // habilita o campo 
    [nomeDoCampo].Disabled = false; 

    Tudo isso voce pode colocar no onload do formulário...

    A solução tá ai, basta trabalhar um pouquinho em cima dela, e fazer alguns testes, alerts para ver o que está retornando.

    Testa lá e veja o que acontece.

     

     

     

    sexta-feira, 16 de abril de 2010 21:01
  • ok, mas se eu desabilitar o campo no formulário o usuário não podera ver o campo para cadasrtro  ou auterá-lo, porem desta forma ele pode ver o campo no filtro avaçado. e é justamente isso que eu não quero. Não quero que uma determinada unidade de negócio veja o campo nem da hora do cadastr nem na hora do filtro avançado. Fiz o teste com o cadastro e da certo, mas na hora do filtro avaçado o campo ta la. Entum vi uma propriedade quando esto crianto o  atributo que é visualização, que a tem a opçao sim e não. se eu colocar sim esse campo pode ser visto na consulta, se eu colocar não ele não aparece na consulta. E é isso justamente que eu to precisando, preciso saber como altero essa propriedade via script para que determinada unidade de negócio não veja o campo na hora do pesquisa avançada, e habilitar para as outras que possam ver o campo. entaum so preciso saver como acesso essa propriedade do campo para poder mudar o parametro. se alguem puder me ajudar serei grato.
    Tiago Henrique Consultor de Implantação Microssoft Dynamics CRM
    sábado, 17 de abril de 2010 20:00
  • hummmm.....

     

    não sei. talvez nosso amigo Carlos Amorim saiba,

    Nesse ponto não seria mais facil criar uma nova Função e restringir o acesso no permissionamento? assim evita de criar mil scripts com regras de permissionamento. Assim o usuário viria somente o relacionamento mas nao teria permissionamento para acessar tal registro.

     

    Att.

    segunda-feira, 19 de abril de 2010 21:14
  • Olá Tiago,

    Embora possamos fazer várias coisas com JScript, algumas delas não são contempladas no modelo de arquitetura do CRM, entre elas o permissionamento.

    A propriedade que você mencionou serve para disponibilizar ou não o atributo nas consultas, apenas isso. O CRM só consegue garantir privacidade da informação se as permissões forem feitas através da sua console de segurança. Qualquer workaround não será garantido, entende?

    Exemplificando, imagine que você consiga de alguma forma o que pretende com um JScript, ok? Ainda assim, não terá plena certeza de que os usuários não conseguirão ver a informação, pois eles poderão ter acesso ao assistente de relatórios(onde podem listar o atributo), ao SQL Server como usuários de autenticação integrada(que podem fazer um select contra o banco), a um workflow(que pode mandar por email a informação), etc. Percebe como essa saída é passível de falhas?

    Agora se você definir que o usuário não tem permissão, aí sim! Mesmo que consiga visualizar o atributo na localização avançada, não conseguirá vê-lo, pois não possui privilégios para isso.

    []´s


    Carlos Amorim Junior
    "Já ajudou a comunidade hoje?"
    http://www.dynamicscrm.com.br
    quarta-feira, 28 de abril de 2010 19:13