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. 启动 ...
随机推荐
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore
1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...
- 谈谈如何使用Netty开发实现高性能的RPC服务器
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...
- async & await 的前世今生(Updated)
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- ADO.NET对象的详解
1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- .NET CoreCLR开发人员指南(上)
1.为什么每一个CLR开发人员都需要读这篇文章 和所有的其他的大型代码库相比,CLR代码库有很多而且比较成熟的代码调试工具去检测BUG.对于程序员来说,理解这些规则和习惯写法非常的重要. 这篇文章让所 ...
- C#发送邮箱
之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了. 之后有整理了一下,写了一个类.直接给类传递信息,就可以发送了. 这里还需要说明的是,发送邮箱需要开通POP3/S ...
- 品牌营销:不要Beat,要逼格!
品牌营销:不要Beat,要逼格! 奥美的创始人大卫·奥格威说,广告营销应当是"具有风度的推销产品".而当下的营销手段,"风度"早已被抛之脑后, ...
- Android local.properties 文件读取
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6202369.html 本文出自[赵彦军的博客] 在Android Studio项目里面有个local.pro ...