I want to set read permissions to some sharepoint groups to a list.
For existing sites I did it manually, Stop Inherit permissions. Then on groups I chose the groups and edited their permissions, which I set to Read only.
I want to do exactly the same but by using code. So when a new site is provisioned permissions are set this way by default.
private void SetReadAccessOnList(SPSite newSite, string groupName)
{
try
{
SPList WorkspaceAccessList = newSite.RootWeb.Lists["mylist"];
newSite.RootWeb.AllowUnsafeUpdates = true;
WorkspaceAccessList.BreakRoleInheritance(true);
using (SPWeb webSite = newSite.OpenWeb())
{
SPGroup group = webSite.Groups[groupName];
AssignReadPermissionsToList(webSite, WorkspaceAccessList, group, SPRoleType.Reader);
}
newSite.RootWeb.AllowUnsafeUpdates = false;
}
catch (Exception ex)
{
Microsoft.Office.Server.Diagnostics.PortalLog.LogString("Error Site: : {0} || {1}", ex.Message, ex.StackTrace);
SPUtility.TransferToErrorPage(ex.ToString());
}
}
public static void AssignReadPermissionsToList(SPWeb web, SPSecurableObject secObj, SPPrincipal obj, SPRoleType roleType)
{
if (!secObj.HasUniqueRoleAssignments)
{
secObj.BreakRoleInheritance(false, true);
}
SPRoleAssignment roleAssignment = new SPRoleAssignment(obj);
SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
secObj.RoleAssignments.Add(roleAssignment);
}
Thanks.