private bool AddUserIntoGroup(SPWeb web, string sGroupName, int iUserID) { bool res = false; try { web.AllowUnsafeUpdates = true; SPGroup oGroup = web.SiteGroups[sGroupName]; SPUser oUser = web.AllUsers.GetByID(iUserID); if (oUser != null) { oGroup.AddUser(oUser); oGroup.Update(); res = true; } web.Update(); } catch { } return res; } private bool CreateSiteGroup(SPWeb rootWeb, string sGroupName, string sGroupDescription) { bool res = false; try { rootWeb.AllowUnsafeUpdates = true; SPGroupCollection collGroups = rootWeb.SiteGroups; string sLoginName = rootWeb.CurrentUser.LoginName; SPUser oUser = rootWeb.SiteUsers[sLoginName]; SPMember oMember = rootWeb.SiteUsers[sLoginName]; collGroups.Add(sGroupName, oMember, oUser, sGroupDescription); res = true; rootWeb.Update(); } catch (Exception ex) { Response.Write("Error:" + ex.Message + "<br/>"); return false; } return res; } private void DeleteSiteGroup(SPWeb web, string groupName) { try { web.AllowUnsafeUpdates = true; SPGroupCollection groups = web.SiteGroups; groups.Remove(groupName); web.Update(); } catch { } } private bool IsContainCurrentUser(object obj) { bool result = false; if (obj == null) { return false; } SPSite securitySite = null; SPWeb securityWeb = null; SPWeb tempWeb = null; try { SPFieldUserValueCollection approversCollection; SPWeb web = SPContext.Current.Web; web.AllowUnsafeUpdates=true; bool groupFlag = false; string groupName = "Grp" + Guid.NewGuid().ToString(); // Response.Write("groupName: " + groupName + "<br/>"); SPSecurity.RunWithElevatedPrivileges(delegate() { using (securitySite = new SPSite(SPContext.Current.Site.ID)) { using (securityWeb = securitySite.RootWeb) { groupFlag = CreateSiteGroup(securityWeb, groupName, ""); //Response.Write("groupFlag: " + groupFlag.ToString() + "<br/>"); } } }); approversCollection = (SPFieldUserValueCollection)obj; int id = SPContext.Current.Web.CurrentUser.ID; foreach (SPFieldUserValue spFieldUserValue in approversCollection) { if (spFieldUserValue.User == null) { //Response.Write("Group" + spFieldUserValue.LookupValue+ "<br/>"); if (web.SiteGroups[spFieldUserValue.LookupValue].ContainsCurrentUser) { result = true; break; } } else { if (spFieldUserValue.LookupId == id) { result = true; break; } else { AddUserIntoGroup(securityWeb, groupName, spFieldUserValue.LookupId); } } } //System.Threading.Thread.Sleep(500); tempWeb = SPContext.Current.Site.OpenWeb(); if (!result) { //validate domain user has current user if (groupFlag) { //Response.Write(SPContext.Current.Web.SiteGroups[groupName].Users.Count); SPGroup group = tempWeb.SiteGroups[groupName]; if (group.ContainsCurrentUser) { result = true; } } } //delete group DeleteSiteGroup(securityWeb, groupName); } catch (Exception ex) { //return false; Response.Write("error:" + ex.Message); } finally { if (securityWeb != null) { securityWeb.Dispose(); securityWeb = null; } if (securitySite != null) { securitySite.Dispose(); securitySite = null; } if (tempWeb != null) { tempWeb.Dispose(); tempWeb = null; } } return result; }
用法:bool flag=!IsContainCurrentUser(sourceItem["阅读人员"]);