none
在Plugin里判断权限? RRS feed

  • 问题

  • 我想在Plugin里面判断当前用户对应角色所拥有的权限,比如 创建客户 分派 。不知道这样能够实现么?SDK里有没有这方面的例子?
    梅小虎
    2009年4月22日 9:22

答案

  • 用户有没有权限还要看指定客户记录的负责人情况,比如某个用户删除权限是用户级别的,那么他只能删除那些负责人是他自己的记录,遇到一个负责人不是他自己的客户记录(guid)他就没有权限删除了.


    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月30日 6:34
    2009年4月29日 8:23
    版主

全部回复

  • RetrievePrincipalAccess Message

    [C#]  
    // Set up the CRM Service.  
    CrmAuthenticationToken token = new CrmAuthenticationToken();  
    // You can use enums.cs from the SDK\Helpers folder to get the enumeration for Active Directory authentication.  
    token.AuthenticationType = 0;   
    token.OrganizationName = "AdventureWorksCycle";  
       
    CrmService service = new CrmService();  
    service.Url = "http://<servername>:<port>/mscrmservices/2007/crmservice.asmx";  
    service.CrmAuthenticationTokenValue = token;  
    service.Credentials = System.Net.CredentialCache.DefaultCredentials;  
     
    // Create the SecurityPrincipal object.  
    // This references the user whose access is being checked.  
    SecurityPrincipal principal = new SecurityPrincipal();  
     
    // Set the properties of th SecurityPrincipal object.  
    // Type is the typecode of the principalid.  
    principal.Type = SecurityPrincipalType.User;  
    // PrincipalId is the GUID of the user whose access is being checked.  
    principal.PrincipalId = new Guid("F111F0B1-70CE-44B4-8BF2-2E6C7EADA111");  
     
    // Create the target for the request.  
    TargetOwnedAccount owner = new TargetOwnedAccount();  
     
    // EntityId is the GUID of the account to which access is being checked.  
    owner.EntityId = new Guid("2B951FBC-1C56-4430-B23B-20A1349068F3");  
     
    // Create the request object.  
    RetrievePrincipalAccessRequest access = new RetrievePrincipalAccessRequest();  
     
    // Set the properties of the request object.  
    access.Principal = principal;  
    access.Target = owner;  
     
    // Execute the request.  
    RetrievePrincipalAccessResponse accessResponse = (RetrievePrincipalAccessResponse)service.Execute(access);

    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    2009年4月22日 11:31
    版主
  • 我在SDK里看到了这段代码,麻烦可以解释下principal.PrincipalId = new Guid("F111F0B1-70CE-44B4-8BF2-2E6C7EADA111");  ,owner.EntityId = new Guid("2B951FBC-1C56-4430-B23B-20A1349068F3"); 这2个ID的区别,另外查询出来的这个accessResponse 该怎么用呢?  我知道它有个AccessRights属性
    梅小虎
    2009年4月23日 3:29
  • PrincipalId  是用户的guid
    owner.EntityId是实体记录的guid.

    // Execute the request.  
    RetrievePrincipalAccessResponse accessResponse = (RetrievePrincipalAccessResponse)service.Execute(access);

    bool haveDeleteAccess = false;

    //判断用户是否拥有删除权限

    haveDeleteAccess = ((accessResponse.AccessRights & AccessRights.DeleteAccess) > 0);


    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月24日 1:34
    • 取消答案标记 梅小虎 2009年4月28日 7:02
    2009年4月23日 10:36
    版主
  • 参照你上面的代码,我测试了一下有一个Bug 各位大大帮我看看  RetrievePrincipalAccessResponse accessResponse = (RetrievePrincipalAccessResponse)service.Execute(access); 这一步 "server was unable to progress request"
      static void Main(string[] args)
            {
                // Set up the CRM Service.
                CrmAuthenticationToken token = new CrmAuthenticationToken();
                token.AuthenticationType = 0;
                token.OrganizationName = "orgname";
                CrmService.CrmService service = new mainUserRole.CrmService.CrmService();
                service.Url = "http://de-c179-src/MSCrmServices/2007/CrmService.asmx";
                service.CrmAuthenticationTokenValue = token;
                service.Credentials = System.Net.CredentialCache.DefaultCredentials;        
                //userID
                WhoAmIRequest userRequest = new WhoAmIRequest();
                WhoAmIResponse user = (WhoAmIResponse)service.Execute(userRequest);
                Guid userid = user.UserId;
      // Create the SecurityPrincipal object.  
                // This references the user whose access is being checked.  
                SecurityPrincipal principal = new SecurityPrincipal();            // Set the properties of th SecurityPrincipal object.  
                // Type is the typecode of the principalid.  
                principal.Type = SecurityPrincipalType.User;
                // PrincipalId is the GUID of the user whose access is being checked.  
                principal.PrincipalId = userid;            // Create the target for the request.   
               TargetOwnedAccount owner = new TargetOwnedAccount();           // EntityId is the GUID of the account to which access is being checked.  
                owner.EntityId = new Guid("70816501-EDB9-4740-A16C-6A5EFBC05D84");           // Create the request object.   
               RetrievePrincipalAccessRequest access = new RetrievePrincipalAccessRequest();           // Set the properties of the request object.  
                access.Principal = principal;
                access.Target = owner;
                // Execute the request.  
                RetrievePrincipalAccessResponse accessResponse = (RetrievePrincipalAccessResponse)service.Execute(access);
               bool haveDeleteAccess = false;           //判断用户是否拥有删除权限
              haveDeleteAccess = ((accessResponse.AccessRights & AccessRights.DeleteAccess) > 0);
                if (haveDeleteAccess)
                {
                    Console.WriteLine("You have deleteteaccess");
                }
                #endregion

            }


    梅小虎

    2009年4月28日 7:02
  • 存在 guid为{70816501-EDB9-4740-A16C-6A5EFBC05D84}的客户吗?
    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    2009年4月29日 7:36
    版主
  • 刚和天天交流过,这个ID是客户记录的ID,也就是我做这个操作的前提是CRM系统一定要有一个已经存在的记录???这个ID可以有默认的么??
    梅小虎
    2009年4月29日 8:04
  • 用户有没有权限还要看指定客户记录的负责人情况,比如某个用户删除权限是用户级别的,那么他只能删除那些负责人是他自己的记录,遇到一个负责人不是他自己的客户记录(guid)他就没有权限删除了.


    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月30日 6:34
    2009年4月29日 8:23
    版主