3,242
社区成员
发帖
与我相关
我的任务
分享
using (SPWeb web = site.OpenWeb(webID))
{
SPList list = web.Lists[listID];
SPListItem item = list.GetItemById(itemID); //取到想要设置的记录
if ("UserMulti" == field.TypeAsString) //判断该字段是否设置了“允许多重选择”
{
SPFieldUserValueCollection members = (SPFieldUserValueCollection)item[field.Title]; //取出所有数据内容
foreach (SPFieldUserValue member in members)
{
if (member.User != null) //判断该对象是否是用户类型
{
principal.AddUser(member.User); //添加用户
}
else
{
try
{
SPGroup group = web.SiteGroups[member.LookupValue]; //获取用户组
principal.AddGroup(group); //添加用户组
}
catch
{
continue;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
namespace DOC.EventReceiver1
{
//用户或组存放类
public class UsersAndGroups
{
List<SPUser> userList;
List<SPGroup> groupList;
public List<SPGroup> GroupList
{
get { return groupList; }
set { groupList = value; }
}
public List<SPUser> UserList
{
get { return userList; }
set { userList = value; }
}
public UsersAndGroups()
{
userList = new List<SPUser>();
groupList = new List<SPGroup>();
}
public UsersAndGroups(List<SPUser> _users, List<SPGroup> _groups)
{
userList = new List<SPUser>();
groupList = new List<SPGroup>();
this.userList = _users;
this.groupList = _groups;
}
public void AddUser(SPUser _user)
{
this.userList.Add(_user);
}
public void AddGroup(SPGroup _group)
{
this.groupList.Add(_group);
}
}
public class EventReceiver1 : SPItemEventReceiver
{
//项目添加事件后的处理
public override void ItemAdded(SPItemEventProperties properties)
{
SPListItem item = properties.ListItem; //获取当前记录
Guid siteID = properties.SiteId;
Guid webID = properties.Web.ID;
Guid listID = properties.ListId;
//获取查看者、编辑者信息
UsersAndGroups leaders = GetUserAndGroupByField(siteID, webID, listID, item.ID, properties.List.Fields["查看者"]);
UsersAndGroups members = GetUserAndGroupByField(siteID, webID, listID, item.ID, properties.List.Fields["编辑者"]);
bool success = SetRoleAssignment(siteID, webID, listID, item.ID, leaders, members);
}
//通过字段获取用户或组
private UsersAndGroups GetUserAndGroupByField(Guid siteID, Guid webID, Guid listID, int itemID, SPField field)
{
UsersAndGroups principal = new UsersAndGroups();
try
{
SPSecurity.RunWithElevatedPrivileges(delegate() //提升权限,以保证普通用户登录,也能取到用户及组信息
{
using (SPSite site = new SPSite(siteID))
{
using (SPWeb web = site.OpenWeb(webID))
{
SPList list = web.Lists[listID];
SPListItem item = list.GetItemById(itemID); //取到想要设置的记录
if ("UserMulti" == field.TypeAsString) //判断该字段是否设置了“允许多重选择”
{
SPFieldUserValueCollection members = (SPFieldUserValueCollection)item[field.Title]; //取出所有数据内容
foreach (SPFieldUserValue member in members)
{
if (member.User != null) //判断该对象是否是用户类型
{
principal.AddUser(member.User); //添加用户
}
else
{
try
{
SPGroup group = web.SiteGroups[member.LookupValue]; //获取用户组
principal.AddGroup(group); //添加用户组
}
catch
{
continue;
}
}
}
}
else
{
string strUser = item[field.Title].ToString();
string loginName = strUser.Split('#')[1];
SPUser member = web.EnsureUser(loginName);
principal.AddUser(member);
}
}
}
});
return principal;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
//权限设置
private bool SetRoleAssignment(Guid siteID, Guid webID, Guid listID, int itemID, UsersAndGroups leaders, UsersAndGroups members)
{
bool success = false;
try
{
SPSecurity.RunWithElevatedPrivileges(delegate() //提升权限,以保证普通用户登录,也能取到用户及组信息
{
using (SPSite site = new SPSite(siteID))
{
using (SPWeb web = site.OpenWeb(webID))
{
web.AllowUnsafeUpdates = true; //允许对网站进行不安全修改
SPList list = web.Lists[listID];
SPListItem item = list.GetItemById(itemID);
item.BreakRoleInheritance(false); //断开该条记录的继承
//获取该条记录当前所有用户\组的权限
SPRoleAssignmentCollection itemRoleAssignments = item.RoleAssignments;
//获取当前网站的所有权限级别
SPRoleDefinitionCollection roleDefinitions = web.RoleDefinitions;
//添加查看者查看的权限
SPRoleDefinition leaderRoleDefinition = roleDefinitions["查看"]; //定义查看者查看的权限级别
foreach (SPUser user in leaders.UserList)
{
SPRoleAssignment leaderRoleAss = new SPRoleAssignment(user); //定义一条权限级别,并指定用户
leaderRoleAss.RoleDefinitionBindings.Add(leaderRoleDefinition); //绑定该权限级别的具体权限(查看)
itemRoleAssignments.Add(leaderRoleAss);
}
foreach (SPGroup group in leaders.GroupList)
{
SPRoleAssignment leaderRoleAss = new SPRoleAssignment(group);
leaderRoleAss.RoleDefinitionBindings.Add(leaderRoleDefinition);
itemRoleAssignments.Add(leaderRoleAss);
}
//添加编辑者编辑的权限
SPRoleDefinition memberRoleDefinition = roleDefinitions["编辑"];
foreach (SPUser user in members.UserList)
{
SPRoleAssignment leaderRoleAss = new SPRoleAssignment(user);
leaderRoleAss.RoleDefinitionBindings.Add(memberRoleDefinition);
itemRoleAssignments.Add(leaderRoleAss);
}
foreach (SPGroup group in members.GroupList)
{
SPRoleAssignment leaderRoleAss = new SPRoleAssignment(group);
leaderRoleAss.RoleDefinitionBindings.Add(memberRoleDefinition);
itemRoleAssignments.Add(leaderRoleAss);
}
item.SystemUpdate(false);
web.AllowUnsafeUpdates = false;
}
}
});
return success;
}
catch
{
return false;
}
}
}
}