我有一个这样的sharepoint列表:
List
---------Folder 1
-----------------Item 1
-----------------Item 2
---------Folder 2
-----------------Item 1
-----------------Item 2
---------Folder 3
-----------------Item 1
-----------------Item 2
如何获取
List
中的所有文件夹检查当前用户对
Folder 1
,Folder 2
,Folder 3
是否有Contribute
权限
要获取列表的文件夹列表,您可以使用SPList
对象的Folders
属性:
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
}
要检查给定用户是否对文件夹具有贡献权限,您需要获得与给定用户的RoleAssignment
的SPFolder,
检查相关联的SPListItem
,并检查其RoleDefinitionBindings
的贡献角色定义:
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
}
private IEnumerable<SPFolder> GetListFolders(SPList list)
{
return list.Folders.OfType<SPListItem>().Select(item => item.Folder);
}
通过检查角色定义的成员关系来检查用户权限有点冒险。谁说角色定义不会被重命名,或者角色定义中包含的基本权限不会被修改。
如果目标主要是检查当前用户对可安全对象的权限,那么我认为更好的方法是简单地调用SPSecurableObject (SPListItem, SPList, SPWeb或SPSite)的重载DoesUserHavePermissions方法之一,并带有所需的权限掩码。