zoukankan      html  css  js  c++  java
  • SharePoint开发错误—此用户不存在或不唯一

    今天做了一个用户管理的WebPart,系统帐户测试OK,发现普通的用户访问那个页面时提示“拒绝访问”,于是将其中的一部分代码拎出来做测试,建了一个WebPartTest项目,向里面添加了两个控件,一个Button,一个ListBox,Button用来触发,ListBox用来显示值,页面主要代码如下:

    1 <asp:UpdatePanel ID="UpdatePanel" runat="server">
    2 <ContentTemplate>
    3 <asp:Button ID="btnTest" Text="Test" OnClick="btnTest_Click" runat="server" />
    4 <asp:ListBox ID="lGroups" Height="200" Width="400" runat="server"></asp:ListBox>
    5 </ContentTemplate>
    6 </asp:UpdatePanel>

    其中btnTest_Click事件如下:

    1 protected void btnTest_Click(object sender, EventArgs e)
    2 {
    3 VisualWebPart1 p = new VisualWebPart1();
    4 lGroups.DataSource = p.GetAllGroupsByCurUser();
    5 lGroups.DataBind();
    6 }

    GetAllGroupsByCurUser()方法用于获取当前网站集中所有者为当前用户或包含当前用户的用户组,其代码如下:

    View Code
     1 public List<SPGroup> GetAllGroupsByCurUser()
    2 {
    3 List<SPGroup> allGroups = new List<SPGroup>();
    4 SPSecurity.RunWithElevatedPrivileges(delegate
    5 {
    6 using (SPSite mySite = SPContext.Current.Site)
    7 //using (SPSite mySite = new SPSite(SPContext.Current.Site.ID))
    8 {
    9 using (SPWeb myWeb = mySite.RootWeb)
    10 {
    11 SPUser u = myWeb.CurrentUser;
    12 SPGroupCollection groups = myWeb.SiteGroups;
    13 foreach (SPGroup g in groups)
    14 {
    15 //判断一下当前用户是否为用户组所有者里面的对象
    16 int a = CheckGroupOrUser(g.Owner);
    17 switch (a)
    18 {
    19 case 1:
    20 SPGroup gg = myWeb.SiteGroups[g.Owner.ToString()];
    21
    22 if (DoesGroupContainUser(gg, u))
    23 {
    24 allGroups.Add(g);
    25 }
    26 break;
    27 case 0:
    28 if (u.LoginName == g.Owner.ToString())
    29 {
    30 allGroups.Add(g);
    31 }
    32 break;
    33 }
    34 }
    35 }
    36 }
    37 });
    38 return allGroups;
    39 }
    40
    41 private int CheckGroupOrUser(SPMember m)
    42 {
    43 int r = 1;
    44 try
    45 {
    46 SPUser u = (SPUser)m;
    47 r = 0;
    48 }
    49 catch (Exception e)
    50 {
    51
    52 }
    53 return r;
    54 }
    55
    56 private bool DoesGroupContainUser(SPGroup g, SPUser u)
    57 {
    58 bool r = false;
    59 foreach (SPUser uu in g.Users)
    60 {
    61 if (uu.LoginName == u.LoginName)
    62 {
    63 r = true;
    64 }
    65 }
    66 return r;
    67 }

    现在将其部署,然后测试了一下,发现系统帐户能成功运行,但是普通用户(网站集中有一个用户组属于它)运行后什么也不发生,由于普通用户是不能进行单步调试的,所以我就查看了一下SharePoint的Logs日志,发现当中有一个错误是“此用户不存在或不唯一”。后来多次修改后发现将SPSite mySite = new SPSite(siteUrl)后居然成功了,原来是用SPContext.Current.Site找不到当前的网站集,需要在这里进行实例化,于是将其改为SPSite mySite = new SPSite(SPContext.Current.Site.ID),然后测试,成功。

  • 相关阅读:
    面试题3(百思教育面试软件开发岗位笔试题)
    python开发工具安装
    涉及 委托事件 程序运行越来越慢
    整理收藏
    数据库作业创建
    剑指offer-面试题37:序列化二叉树及二叉树的基本操作和测试
    剑指offer-面试题41:数据流中的中位数
    快速排序及其优化
    冒泡排序算法及相应的优化
    leetcode问题:缺失数字
  • 原文地址:https://www.cnblogs.com/leolis/p/2133915.html
Copyright © 2011-2022 走看看