• MOSS组、用户、权限级别,以及出现:用户不存在或用户不唯一 及 拒绝访问 问题的解决方法


    问题描述:

    //角色模拟:这里要特别注意,如果使用角色模拟可能会出现"此用户不存在或不唯一""拒绝访问"的错误

       //impersonate.BeginImpersonate();

     

       // 这句很重要,否则无法添加组

       web.AllowUnsafeUpdates = true;

     

       // 1. 添加用户组

       web.SiteGroups.Add(GroupName, owner, defaultUser, description);

       web.Update();

     

       SPGroup group = null;

     

       // 判断组是否新建成功

       for (int i = 0; i < web.SiteGroups.Count; i++)

       {

           if (web.SiteGroups[i].Name.Equals(GroupName))

           {

                group = web.SiteGroups[i];

           }

       }

     

       // 如果创建不成功,则返回false

       if (null == group)

       {

           Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "key", "alert('[系统提示]新建组不成功,请重试!');", true);

           return false;

       }

     

       // 2. 向组里添加用户

       for (int j = 0; j < lstUsers.Items.Count; j++)

       {

           //登录名:域名+用户登录账户

           string loginName = ADDomain + @"\" + lstUsers.Items[j].Value;

     

           // 判断该用户是否已在组中

           bool hasExist = false;

           for (int h = 0; h < group.Users.Count; h++)

           {

           if (group.Users[h].LoginName.Equals(loginName))

           {

               hasExist = true;

           }

           }

           if (!hasExist)

           {

                 group.AddUser(loginName, "", lstUsers.Items[j].Text, "custom add");

                 group.Update();

           }

     

       }

             // 3. 为组分配权限级别

             ListItemCollection lic = GetSelectedRoles(cblRoles);

             for (int i = 0; i < lic.Count; i++)

             {

                 // 根据RoleDefinitionID,返回RoleDefinition

                 SPRoleDefinition roleDefinition = GetRoleDefinitionByID(siteURL, webRelativeURL, lic[i].Value);

     

                 if (roleDefinition != null)

                 {

                     SPRoleAssignment roleAssignments = new SPRoleAssignment(group);

                     SPRoleDefinition roleDefinitions = roleDefinition;

                     roleAssignments.RoleDefinitionBindings.Add(roleDefinitions);

                     web.RoleAssignments.Add(roleAssignments);

                 }

             }

     

    //impersonate.StopImpersonate();

     

    如果在角色模拟部分调用下面的代码:

    impersonate.BeginImpersonate();

    CreateUser(..)

    impersonate.StopImpersonate();

    如下:

      protected SPUser CreateUser(string strLoginName, string strEMail, string strName, string strNotes, string strSiteURL)

      {

          SPUser spReturn = null;

     

          try

          {

              //Open the SharePoint site

              using (SPSite spSite = new SPSite(strSiteURL)) // 这里将会出错:“拒绝访问

              {

                  using (SPWeb spWeb = spSite.OpenWeb())

                  {

                      spWeb.AllowUnsafeUpdates = true;

                      //Assign role and add user to site

                      SPRoleAssignment spRoleAssignment = new SPRoleAssignment(strLoginName, strEMail, strName, strNotes);

                      //Using Contribute, might need high access

                      SPRoleDefinition spSPRoleDefinition = spWeb.RoleDefinitions["读取"];

     

                      spRoleAssignment.RoleDefinitionBindings.Add(spSPRoleDefinition);

                      spWeb.RoleAssignments.Add(spRoleAssignment);

     

                      //Update site

                      spWeb.Update();

                      spWeb.AllowUnsafeUpdates = false;

                      spReturn = spWeb.AllUsers[strLoginName];

                  }

              }

          }

          catch (Exception ex)

          {

          }

     

          return spReturn;

      }

    原因:


    角色模拟的问题

    解决方案一:

    使用域管理员帐户进行操作时没有问题:Domain Admins组成员。当然这在实际使用中不是一个好的解决方案。

     

    解决方案二:

    删除角色模拟。在匿名用户访问状态下面,角色模拟经常出错。我运行了许多次都出错了。而且还要明文密码,不太安全。
       
            如果对moss操作权限不够,用权限提升:
                                   SPSecurity.RunWithElevatedPrivileges(delegate()
                                   {
                                      // implementation details omitted
                                    });
       运行这一段代码的用户是应用程序池的用户。
       详见: http://soft.zdnet.com.cn/software_zone/2007/1104/605943.shtml 
       

  • 相关阅读:
    嵌入式系统的应用
    linux shell编程
    JS高级学习历程-1
    JavaScript入门
    二叉树 数据结构
    用css固定textarea文本域大小尺寸
    ie img 3px bug
    OpenCV-Python(1)在Python中使用OpenCV进行人脸检测
    教你用Python解决非平衡数据问题(附代码)
    图片人脸检测(OpenCV版)
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1377503.html
Copyright © 2020-2023  润新知