我有一个像这样的分享名单:
List
---------Folder 1
-----------------Item 1
-----------------Item 2
---------Folder 2
-----------------Item 1
-----------------Item 2
---------Folder 3
-----------------Item 1
-----------------Item 2
如何在List
中获取所有文件夹?
之后检查当前用户对Contribute
,Folder 1
,Folder 2
{/ 1>}是否有Folder 3
的权限?
答案 0 :(得分:3)
要获取列表的文件夹列表,您可以使用Folders
对象的SPList
属性:
private SPFolderCollection GetListFolders(SPList list) {
return list.Folders;
// you can also do:
// return list.Folders.Cast<SPFolder>().ToList();
// to return a List<SPFolder> instead of a SPFolderCollection
}
要检查给定用户是否对文件夹具有Contribute权限,您需要获取与SPListItem
相关联的SPFolder,
检查给定用户的RoleAssignment
并检查其RoleDefinitionBindings
1}}用于Contribute角色定义:
private bool HasContributePermissionOnFolder(SPFolder folder, SPPrincipal user) {
var contributePermission = folder.ParentWeb.RoleDefinitions["Contribute"];
var roleAssignementsOfUser = folder.Item.RoleAssignments.Cast<SPRoleAssignment>()
.Where(ra => ra.Member == user);
var hasContributePermission = roleAssignementsOfUser
.Where(ra => ra.RoleDefinitionBindings.Contains(contributePermission)).Count() > 0;
return hasContributePermission;
}
使用示例
//remember to add using System.Linq; for the above code to work
//SPList list = <your list>;
//SPWeb web = <your web>;
var folders = GetAllFoldersOfList(list);
foreach (SPFolder folder in folders) {
if (HasContributePermissionOnFolder(folder, spWeb.CurrentUser)) {
// do stuff
}
答案 1 :(得分:1)
private IEnumerable<SPFolder> GetListFolders(SPList list)
{
return list.Folders.OfType<SPListItem>().Select(item => item.Folder);
}
答案 2 :(得分:0)
通过检查用户角色定义的成员资格来检查用户权限有点冒险。谁可以说不会重命名角色定义,也不会修改角色定义中包含的基本权限。
如果目标主要是检查当前用户对安全对象的权限,那么我认为更好的方法就是使用所需的权限调用SPSecurableObject(SPListItem,SPList,SPWeb或SPSite)的重载的DoesUserHavePermissions方法之一掩模。