Sharepoint2007中的權(quán)限都是通過(guò)角色來(lái)定義的,一切權(quán)限都是通過(guò)權(quán)限來(lái)設(shè)置,在設(shè)置權(quán)限的時(shí)候,只能給用戶(hù)或組賦予一個(gè)角色,而不能直接去修改他的權(quán)限。
每一個(gè)能分配權(quán)限的對(duì)象(SPWeb、SPList、SPListItem)都會(huì)有一個(gè)RoleAssignments屬性,它是一個(gè)SPRoleAssignmentCollection類(lèi)型的屬性,用于分配權(quán)限。此外,在SPWeb里還有RoleDefinitions屬性(只在SPWeb里有,角色只能定義在網(wǎng)站里)。
1.給一個(gè)用戶(hù)設(shè)置一個(gè)詳細(xì)的自定義的權(quán)限:
SPUser user ;//取得Sharepoint用戶(hù)
SPRoleAssignment myRoleA = new SPRoleAssignment(user);
SPRoleDefinition myRoleD = web.RoleDefinitions["xxx"];
myRoleA.RoldDefinitionBindings.Add(myRoleD);
list.RoleAssignments.Add(myRoleA);
2.修改一個(gè)用戶(hù)的權(quán)限:
SPRoleAssignment myRoleA = list.RoleAssignments.GetAssignmentByPrincipal(user);
SPRoleDefinition myRoleD = web.RoleDefinitions["xxx"];
myRoleA.RoldDefinitionBindings.Add(myRoled);
myRoleA.Update();
如果該列表的權(quán)限是繼承該網(wǎng)站的,那么要首先打破這種繼承關(guān)系
list.BreakRoleInheritance(true/false);
參數(shù)是true將網(wǎng)站中的權(quán)限拷貝過(guò)來(lái)和原來(lái)的權(quán)限是一樣的,如果是false則為列表模板的默認(rèn)權(quán)限。
SPListItem item = properties.ListItem;
SPWeb web = properties.OpenWeb();
SPUser user = web.EnsureUser((new SPFieldLookupValue(item["Test"].ToString())).LookupValue);
SPUser chris = web.EnsureUser((new SPFieldLookupValue(item["chris"].ToString())).LookupValue);
SPUser henry = web.EnsureUser((new SPFieldLookupValue(item["Personalabteilung"].ToString())).LookupValue);
SPRoleDefinition roleReader = web.RoleDefinitions.GetByType(SPRoleType.Reader);
SPRoleDefinition roleWriter = web.RoleDefinitions.GetByType(SPRoleType.Contributor);
SPRoleAssignment roleAssignmentReader = new SPRoleAssignment((SPPrincipal)user);
SPRoleAssignment roleAssignmentWriter = new SPRoleAssignment((SPPrincipal)chris );
SPRoleAssignment roleAssignmentWriterOther = new SPRoleAssignment((SPPrincipal)henry );
roleAssignmentReader .RoleDefinitionBindings.Add(roleReader);
roleAssignmentWriter .RoleDefinitionBindings.Add(roleWriter);
roleAssignmentWriterOther .RoleDefinitionBindings.Add(roleWriter);
if (!item.HasUniqueRoleAssignments)
{
item.BreakRoleInheritance(false);
}
item.RoleAssignments.Add(roleAssignmentReader);
item.RoleAssignments.Add(roleAssignmentWriter);
item.RoleAssignments.Add(roleAssignmentWriterOther );
item.Update();