1: private void MakeWebReadonlyInternal(SPWeb web)
2: { 3: SPRoleDefinition fullControlPermissionRole = web.RoleDefinitions.GetByType(SPRoleType.Administrator);
4: SPRoleDefinition readerPermissionRole = web.RoleDefinitions.GetByType(SPRoleType.Reader);
5: if (!web.HasUniqueRoleAssignments)
6: { 7: web.BreakRoleInheritance(true);
8: }
9: if (!CheckSytemAdminFullControl(web, fullControlPermissionRole))
10: { 11: AddSystemAdminFullControl(web, fullControlPermissionRole);
12: }
13: MakeOtherUsersReader(web, readerPermissionRole);
14: RestoreRoleInheritance(web);
15: }
16:
17: private void RestoreRoleInheritance(SPWeb web)
18: { 19: foreach (SPList list in web.Lists)
20: { 21: if (list.HasUniqueRoleAssignments)
22: { 23: list.ResetRoleInheritance();
24: }
25: }
26: }
27:
28: private void MakeOtherUsersReader(SPWeb web, SPRoleDefinition readerPermissionRole)
29: { 30: foreach (SPRoleAssignment roleAssignment in web.RoleAssignments)
31: { 32: if (roleAssignment.Member.ID != web.Site.SystemAccount.ID)
33: { 34: roleAssignment.RoleDefinitionBindings.RemoveAll();
35: roleAssignment.RoleDefinitionBindings.Add(readerPermissionRole);
36: roleAssignment.Update();
37: }
38: }
39: }
40:
41: private void AddSystemAdminFullControl(SPWeb web, SPRoleDefinition fullControlPermissionRole)
42: { 43: SPRoleAssignment systemAdminRoleAssignment = new SPRoleAssignment(web.Site.SystemAccount);
44:
45: systemAdminRoleAssignment.RoleDefinitionBindings.Add(fullControlPermissionRole);
46: web.RoleAssignments.Add(systemAdminRoleAssignment);
47: web.Update();
48: }
49:
50: private bool CheckSytemAdminFullControl(SPWeb web, SPRoleDefinition fullControlPermissionRole)
51: { 52: foreach (SPRoleAssignment roleAssignment in web.RoleAssignments)
53: { 54: if (roleAssignment.Member.ID == web.Site.SystemAccount.ID)
55: { 56: if (!roleAssignment.RoleDefinitionBindings.Contains(fullControlPermissionRole))
57: { 58: roleAssignment.RoleDefinitionBindings.Add(fullControlPermissionRole);
59: roleAssignment.Update();
60: }
61: return true;
62: }
63: }
64: return false;
65: }