SharePoint开发错误—此用户不存在或不唯一
2011-08-10 17:38
127 查看
今天做了一个用户管理的WebPart,系统帐户测试OK,发现普通的用户访问那个页面时提示“拒绝访问”,于是将其中的一部分代码拎出来做测试,建了一个WebPartTest项目,向里面添加了两个控件,一个Button,一个ListBox,Button用来触发,ListBox用来显示值,页面主要代码如下:
其中btnTest_Click事件如下:
GetAllGroupsByCurUser()方法用于获取当前网站集中所有者为当前用户或包含当前用户的用户组,其代码如下:
View Code
现在将其部署,然后测试了一下,发现系统帐户能成功运行,但是普通用户(网站集中有一个用户组属于它)运行后什么也不发生,由于普通用户是不能进行单步调试的,所以我就查看了一下SharePoint的Logs日志,发现当中有一个错误是“此用户不存在或不唯一”。后来多次修改后发现将SPSite mySite = new SPSite(siteUrl)后居然成功了,原来是用SPContext.Current.Site找不到当前的网站集,需要在这里进行实例化,于是将其改为SPSite mySite = new SPSite(SPContext.Current.Site.ID),然后测试,成功。
<asp:UpdatePanel ID="UpdatePanel" runat="server"> <ContentTemplate> <asp:Button ID="btnTest" Text="Test" OnClick="btnTest_Click" runat="server" /> <asp:ListBox ID="lGroups" Height="200" Width="400" runat="server"></asp:ListBox> </ContentTemplate> </asp:UpdatePanel>
其中btnTest_Click事件如下:
protected void btnTest_Click(object sender, EventArgs e) { VisualWebPart1 p = new VisualWebPart1(); lGroups.DataSource = p.GetAllGroupsByCurUser(); lGroups.DataBind(); }
GetAllGroupsByCurUser()方法用于获取当前网站集中所有者为当前用户或包含当前用户的用户组,其代码如下:
View Code
public List<SPGroup> GetAllGroupsByCurUser() { List<SPGroup> allGroups = new List<SPGroup>(); SPSecurity.RunWithElevatedPrivileges(delegate { using (SPSite mySite = SPContext.Current.Site) //using (SPSite mySite = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb myWeb = mySite.RootWeb) { SPUser u = myWeb.CurrentUser; SPGroupCollection groups = myWeb.SiteGroups; foreach (SPGroup g in groups) { //判断一下当前用户是否为用户组所有者里面的对象 int a = CheckGroupOrUser(g.Owner); switch (a) { case 1: SPGroup gg = myWeb.SiteGroups[g.Owner.ToString()]; if (DoesGroupContainUser(gg, u)) { allGroups.Add(g); } break; case 0: if (u.LoginName == g.Owner.ToString()) { allGroups.Add(g); } break; } } } } }); return allGroups; } private int CheckGroupOrUser(SPMember m) { int r = 1; try { SPUser u = (SPUser)m; r = 0; } catch (Exception e) { } return r; } private bool DoesGroupContainUser(SPGroup g, SPUser u) { bool r = false; foreach (SPUser uu in g.Users) { if (uu.LoginName == u.LoginName) { r = true; } } return r; }
现在将其部署,然后测试了一下,发现系统帐户能成功运行,但是普通用户(网站集中有一个用户组属于它)运行后什么也不发生,由于普通用户是不能进行单步调试的,所以我就查看了一下SharePoint的Logs日志,发现当中有一个错误是“此用户不存在或不唯一”。后来多次修改后发现将SPSite mySite = new SPSite(siteUrl)后居然成功了,原来是用SPContext.Current.Site找不到当前的网站集,需要在这里进行实例化,于是将其改为SPSite mySite = new SPSite(SPContext.Current.Site.ID),然后测试,成功。
相关文章推荐
- SharePoint 2010高并发下异常“此用户不存在或不唯一”处理
- WSP部署错误—SharePoint管理框架中的对象“SPSolutionLanguagePack Name=0”依赖其他不存在的对象
- SharePoint开发中常见的几种错误类型及解决方法!
- Android开发:Error:(3, 17) 错误: 程序包org.junit不存在
- 完成登录,数组中有一定的用户手机号,提示用户输入手机号进行登录, 用户输入手机号如果是数组中的手机号,提示欢迎使用,如果不存在该手机号,提示“手机号错误请重试”。
- 在sharepoint打开网页时,修正发生意外错误页面,及在vs里面调式sharepoint用户控件文件
- SharePoint开发错误—正在尝试使用已关闭或释放并且不再有效的 SPWeb 对象
- SharePoint 2013 APP 开发示例 (二)获取用户信息
- 微信公众号开发之获取用户唯一的openid
- sharepoint 2010 配置用户同步连接出现错误信息" Unable to process Create message"的一个解决方法
- SharePoint 2007工作流开发点滴(4) : 工作流中的自定义类与内部错误
- 调试sharepoint开发中的用户控件ascx
- 调试sharepoint开发中的用户控件ascx
- 微信开发获取用户信息的时候提示redirect_uri参数错误
- CCS bug之4: 站内发私人留言,用户同时收到email,点击链接,却显示该帖不存在的错误页面
- 黑马程序员之C#编程基础学习笔记:提示用户输入用户名,然后再提示输入密码,如果用户名是"admin"并且密码是“888888”,则提示正确,否则提示错误,如果用户名不是admin还提示用户用户名不存在
- SharePoint开发期间的未知错误问题
- IOS开发之——OpenUDID的使用获取用户唯一设备
- SharePoint 2013 开发——获取用户配置文件属性内容(User Profile)
- SharePoint开发中常见的几种错误类型及解决方法