I am trying to programmatically remove permissions from a specific Sharepoint folder for a user or group.
However, when I get to the folders RoleAssignments I do not get a RoleAssignment for the user or group I am looking for.
I am a little confused because I do get users or groups showing in the RoleAssignments but it's never the complete list that is shown on the Sharepoint web page.
If you do a search for this string in my code " 'This is helpful for debugging to see the users/groups in the RoleAssignments. ", just below it I am looping through the RoleAssignments to see all users/groups that have permissions to the folder. I never seem to get the complete list. For example, if I go to the directory on Sharepoint I can see 3 users/groups that have access to a folder. However, there is only 1 users/groups returned through the RoleAssignments.
Here it the code:
Function RemoveGroups(ByVal myWeb As SPWeb, ByVal arrGroupName() As String, ByVal arrFileName() As String, Optional ByVal strVerboseLog As String = "FALSE") As String()
'Dim myTopWeb As SPWeb = New SPSite(myWeb.ParentWeb.Url).OpenWeb
Dim openUrl As String = myWeb.Url & "/Documents"
Dim myTopWeb As SPWeb = New SPSite(openUrl).OpenWeb
Dim colGroups As SPGroupCollection = myTopWeb.SiteGroups
Dim strGroupOwner As String = strDataOwner
Dim oOwner As SPUser
Dim oDefaultUser As SPMember
Dim mySite As SPSite = New SPSite(destCollection)
Dim rootWeb As SPWeb = mySite.OpenWeb
'http://stackoverflow.com/questions/302279/sharepoint-how-to-programmatically-manage-spfolder-and-splistitem-permissions
'http://blogs.msdn.com/robgruen/archive/2007/11/15/how-to-programmatically-set-permissions-on-files-folders-in-a-sharepoint-document-library.aspx
Try
oOwner = myTopWeb.Users(strGroupOwner)
oDefaultUser = myTopWeb.Users(strGroupOwner)
Catch ex As Exception
Dim strError As String = "Error setting the owner and default user to " + strGroupOwner + ": " & ex.Message
writeTospLog(strError, "Error", "[RemoveGroups]", True)
End Try
For i As Integer = 0 To arrGroupName.GetUpperBound(0)
arrGroupName(i) = replaceIllegalGroupCharacters(arrGroupName(i))
Try
'Dim myGroup As SPGroup = myTopWeb.SiteGroups(arrGroupName(i))
Dim myGroup As SPGroup = colGroups(arrGroupName(i))
Dim myRoleAssignments As SPRoleAssignmentCollection = myTopWeb.RoleAssignments
Dim myRoleAssignment As SPRoleAssignment = myRoleAssignments.GetAssignmentByPrincipal(DirectCast(myGroup, SPPrincipal)) 'New SPRoleAssignment(DirectCast(myGroup, SPPrincipal))
Dim myRoleDefBindings As SPRoleDefinitionBindingCollection = myRoleAssignment.RoleDefinitionBindings
writeTospLog("Removing " + arrGroupName(i) + " as a site group and removing " + strPermissionName + " Permissions", "Message", "[RemoveGroups]", True)
Dim oSubWeb As SPWeb = rootWeb.Webs(destSite)
Dim myFolder As SPFolder = oSubWeb.Folders.Item("Documents")
Dim folders As String() = Nothing
Dim separator As Char() = "\"
folders = arrFileName(0).Split(separator, StringSplitOptions.RemoveEmptyEntries)
'Looping through the directories in the Documents library.
For Each thisFolder As SPFolder In myFolder.SubFolders
'Dim folderName As String = thisFolder.Name
Dim currentFolder As String
Dim finalFolder As SPFolder
Dim removePermissions As Boolean = False
'Check to see if first level name matches our first level name from the database.
If folders(0) = thisFolder.Name Then
'Looping through all subdirectories until we get to the directory we need to change the permissions on.
For Each currentFolder In folders
'Checking to make sure the folder exists in the parent directory.
'This is meant to handle bad paths or paths that no longer exists.
If thisFolder.Name <> currentFolder Then
finalFolder = thisFolder.SubFolders(currentFolder)
thisFolder = finalFolder
removePermissions = True
End If
Next currentFolder
End If
If removePermissions = True Then
'This is helpful for debugging to see the users/groups in the RoleAssignments.
For Each currentRole As SPRoleAssignment In finalFolder.Item.RoleAssignments
If myRoleAssignment.Member.Name = currentRole.Member.Name Then
Dim test As String = currentRole.Member.Name
End If
Dim currentID As Integer = currentRole.Member.ID
Dim currentName As String = currentRole.Member.Name
For Each role As SPRole In currentRole.Member.Roles
Dim roleName As String = role.Name
Dim roleID As Integer = role.ID
Next
Next
finalFolder.Item.BreakRoleInheritance(False)
finalFolder.Item.RoleAssignments.Remove(myRoleAssignment.Member)
finalFolder.Update()
End If
Next
Catch ex2 As Exception
Dim strError As String = "Error removing group: " & ex2.Message
writeTospLog(strError, "Error", "[RemoveGroups]", True)
End Try
'End Try
Next
myTopWeb.Dispose()
Return arrGroupName
End Function