一、需求: 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的更多相关文章

  1. SharePoint Security and Permission System Overview

    转:http://www.sharepointblues.com/2010/09/01/sharepoint-security-and-permission-system-overview/ Shar ...

  2. 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 ...

  3. 【转】必需知道的 SharePoint 权限 Tips

    SharePoint Tips about Permissions: What you need to know         I have been writing tips about Shar ...

  4. 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 ...

  5. 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 ...

  6. SharePoint REST api

    http://msdn.microsoft.com/en-us/magazine/dn198245.aspx Understanding and Using the SharePoint 2013 R ...

  7. permission 文档 翻译 运行时权限

    文档位置:API24/guide/topics/security/permissions.html  System Permissions 系统权限 Android is a privilege-se ...

  8. SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection

    通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...

  9. 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. 启动 ...

随机推荐

  1. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  2. shell注释

    sh里没有多行注释,只能每一行加一个#号.只能像这样: #-------------------------------------------- # 这是一个自动打ipa的脚本,基于webfrogs ...

  3. Hyper-v 安装CentOS 7 (其他虚拟机一样参考)

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html hyper-v安装很多人没弄过,我这里介绍一下.(其他虚拟机参 ...

  4. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  5. 使用Oracle官方巡检工具ORAchk巡检数据库

    ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...

  6. Android性能优化之巧用软引用与弱引用优化内存使用

    前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱引用来优化内存使用.下面来理解几个概念. 1.StrongReference(强引用) 强 ...

  7. Redis链表实现

    链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...

  8. WebGIS中等值线前端生成绘制简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 等值线是GIS制图中常见的功能,一般有两种思路:一种是先进行插 ...

  9. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

  10. 小程序用户反馈 - HotApp小程序统计仿微信聊天用户反馈组件,开源

    用户反馈是小程序开发必要的一个功能,但是和自己核心业务没关系,主要是产品运营方便收集用户的对产品的反馈.HotApp推出了用户反馈的组件,方便大家直接集成使用 源码下载地址: https://gith ...