SharePoint 2103 Check user permission on list
一、需求: check user 对SharePoint list 的permission
代码如下:
private static string GetListPermission(SPList list, string loginName)
{
string perStr = string.Empty;
SPSecurity.RunWithElevatedPrivileges(() =>
{
try
{
SPUser user = list.ParentWeb.Users[loginName];
SPRoleAssignment roleAssignment = list.RoleAssignments.GetAssignmentByPrincipal(user);
SPRoleDefinitionBindingCollection defColl = roleAssignment.RoleDefinitionBindings;
foreach (SPRoleDefinition roleDef in defColl)
{
perStr += roleDef.Name + ";";
}
}
catch (Exception)
{
logger.Debug("Get user permission by list.GetUserEffectivePermissionInfo method, list title: {0}, loginName: {1}.", list.Title, loginName);
try
{
SPPermissionInfo permissionInfo = list.GetUserEffectivePermissionInfo(loginName);
var roleAssignments = permissionInfo.RoleAssignments;
foreach (SPRoleAssignment roleAssignment in roleAssignments)
{
SPRoleDefinitionBindingCollection roleDefColl = roleAssignment.RoleDefinitionBindings;
foreach (SPRoleDefinition roleDef in roleDefColl)
{
perStr += roleDef.Name + ";";
}
}
}
catch (Exception ex)
{
logger.Error("An error occurred while getting permission by list.GetUserEffectivePermissionInfo method, list title: {0}, loginName: {1}, exception; {2}.",
list.Title, loginName, ex.ToString());
}
}
});
return perStr;
}
注意: catch中的代码作用是check,当user是AD group中的member,但却不单独存在于web userInformation list中,此时如果直接获取user SPRoleAssignment,则抛‘Index is out of range’, 所以这样的user可以通过
list.GetUserEffectivePermissionInfo(loginName); 来获取SPPermissionInfo,然后再获取user的SPRoleDefinition,有的读者会问,为什么不直接通过catch中的方法获取,这样无论这个user是否只存在于AD group中都不会抛异常
可以正确的获取到SPRoleDefinition,其实是可以的,之所以这样做,原因在于效率问题。
二、需求: set permission to list
代码如下:
private static void SetLibPermission(SPList list, bool isRead)
{
try
{
SPSecurity.RunWithElevatedPrivileges(() =>
{
bool hasUnique = list.HasUniqueRoleAssignments;
list.ParentWeb.AllowUnsafeUpdates = true;
if (!hasUnique)
{
list.BreakRoleInheritance(false);
list.Update();
}
try
{
SPUser user = list.ParentWeb.EnsureUser(userInfo.Key);
SPRoleDefinitionCollection objDefiColl = list.ParentWeb.RoleDefinitions;
SPRoleAssignment objRoleAssign = new SPRoleAssignment(user);
SPRoleDefinition roleDefination = null;
if (isRead)
{
roleDefination = objDefiColl.GetByType(SPRoleType.Reader);
}
else
{
roleDefination = objDefiColl.GetByType(SPRoleType.Contributor);
}
objRoleAssign.RoleDefinitionBindings.Add(roleDefination);
list.RoleAssignments.Add(objRoleAssign);
}
catch (Exception ex)
{ }
list.Update();
list.ParentWeb.AllowUnsafeUpdates = false;
}); }
catch (Exception ex)
{ }
}
注意:给list赋权限,需要打破继承,具体可以根据实际需求
代码中的userInfo.Key即为loginName
list.ParentWeb.EnsureUser(userInfo.Key);即把user保存到user information list中
SharePoint 2103 Check user permission on list的更多相关文章
- SharePoint Security and Permission System Overview
转:http://www.sharepointblues.com/2010/09/01/sharepoint-security-and-permission-system-overview/ Shar ...
- The Managed Metadata Service or Connection is currently not available 分类: Sharepoint 2015-07-09 13:28 5人阅读 评论(0) 收藏
Does the following error message looks familiar to you? (When you go to Site Actions –> Site Sett ...
- 【转】必需知道的 SharePoint 权限 Tips
SharePoint Tips about Permissions: What you need to know I have been writing tips about Shar ...
- Installing FIM 2010 R2 SP1 Portal on SharePoint Foundation 2013
http://www.fimspecialist.com/fim-portal/installing-fim-2010-r2-sp1-portal-on-sharepoint-foundation-2 ...
- How does Web Analytics works under sharePoint 2010
[http://gokanx.wordpress.com/2013/06/15/how-does-web-analytics-works-under-sharepoint-2010/] You nee ...
- SharePoint REST api
http://msdn.microsoft.com/en-us/magazine/dn198245.aspx Understanding and Using the SharePoint 2013 R ...
- permission 文档 翻译 运行时权限
文档位置:API24/guide/topics/security/permissions.html System Permissions 系统权限 Android is a privilege-se ...
- SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection
通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...
- Failed to start NodeManager caused by "/var/lib/hadoop-yarn/yarn-nm-recovery/yarn-nm-state/LOCK: Permission denied"
Hadoop 安装步骤: 0. 安装前准备(节点机器,环境设置,yum源设置) 1. 配置并安装Cloudera-Manager 2. 启动 CM 服务 3. 安装CDH,并配置集群 4. 启动 ...
随机推荐
- a标签点击跳转失效--IE6、7的奇葩bug
一般运用a标签包含img去实现点击图片跳转的功能,这是前端经常要用到的东西. 今天遇到个神奇的bug:如果在img上再包裹一层div,而且div设置了width和height,则图片区域点击时,无任何 ...
- C++ 应用程序性能优化
C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...
- 关于 CSS 反射倒影的研究思考
原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...
- (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...
- TCP/IP之TCP_NODELAY与TCP_CORK
TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...
- x01.os.22: ubuntu 常用设置
新组装了个 64 位电脑,i5 CPU,进入 ubuntu 后,又是一通搜索设置,整理如下,以备后用. 安装 .dep 包 sudo dpkg -i [filename.dep] 在 ubuntu 中 ...
- Hyper-V上运行的Linux虚拟机验证是否安装了集成服务
Hyper-V上运行的Linux虚拟机验证是否安装了集成服务 ps aux|grep "hv"root 311 0.0 0.0 0 0 ? ...
- Centos 6.6 下搭建php5.2.17+Zend Optimizer3.3.9+Jexus环境
(为何安装php5.2.17这个版本 因为phpweb这个程序用到了Zend Optimizer3.3.9 这个东东已经停止更新了 最高支持5.2版本的php 所以就有了一晚上填坑的自己和总结了这篇文 ...