博客地址:http://blog.csdn.net/FoxDave

最新最全的Office 365官方知识库

SharePoint网站、列表和列表项都属于SecurableObject类型。默认情况下,一个安全对象继承父级的权限。对一个对象设置自定义权限,你需要打破它从父级的继承,通过增删role assignments来自定义权限。

本篇同样会以代码示例来说明如何在列表上设置自定义权限,然后再更改一个组的权限。该示例使用REST服务来:

>获取目标组的ID。该示例通过目标组的ID来获取当前列表上的组所具有的角色绑定,并向列表添加新的角色。

>获取为组定义的新的权限的角色定义的ID,该ID用来向列表添加新的角色。该示例使用已存在的角色定义来定义新的角色,当然你也可以选择创建一个新的角色定义。

>使用BreakRoleInheritance方法打破列表上的权限继承。该示例打破了列表的权限继承并保留当前的权限设置。(在打破权限继承的时候,也可以选择不保留当前的设置而只把当前用户添加到管理权限级别。)

>通过发送DELETE方法请求到role assignment端点来移除列表上的组当前的role assignment。(如果你在打破权限继承的时候没有保留现有设置,可以忽略此步。)

>使用AddRoleAssignment方法向组添加一个role assignment到目标列表,该操作会将组绑定到一个角色定义并将该角色添加到列表上。

前置条件

>SharePoint开发环境

>带有Office Developer Tools的Visual Studio 2013或更高版本

此外还需要设置Add-in在网站范围内的完全控制权限,只有具有足够权限来更改列表权限的用户(如网站所有者)可以执行这个add-in。

示例:使用REST接口在列表上自定义权限

下面的示例展示了一个SharePoint承载的Add-in中的App.js文件的内容。第一个示例使用JavaScript跨域库来构建和发送HTTP请求,第二个示例使用jQuery AJAX请求。在你执行代码之前,需要把占位符的值替换成真实的值。

示例一:跨域库请求

'use strict';// Change placeholder values before you run this code.
var listTitle = 'List 1';
var groupName = 'Group A';
var targetRoleDefinitionName = 'Contribute';
var appweburl;
var hostweburl;
var executor;
var groupId;
var targetRoleDefinitionId;$(document).ready( function() {//Get the URI decoded URLs.hostweburl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));appweburl = decodeURIComponent(getQueryStringParameter("SPAppWebUrl"));// Load the cross-domain library file and continue to the custom code.var scriptbase = hostweburl + "/_layouts/15/";$.getScript(scriptbase + "SP.RequestExecutor.js", getTargetGroupId);
});// Get the ID of the target group.
function getTargetGroupId() {executor = new SP.RequestExecutor(appweburl);var endpointUri = appweburl + "/_api/SP.AppContextSite(@target)/web/sitegroups/getbyname('";endpointUri += groupName + "')/id" + "?@target='" + hostweburl + "'";executor.executeAsync({url: endpointUri,method: 'GET',headers: { 'accept':'application/json;odata=verbose' },success: function(responseData) {var jsonObject = JSON.parse(responseData.body);groupId = jsonObject.d.Id;getTargetRoleDefinitionId();},error: errorHandler});
}// Get the ID of the role definition that defines the permissions
// you want to assign to the group.
function getTargetRoleDefinitionId() {var endpointUri = appweburl + "/_api/SP.AppContextSite(@target)/web/roledefinitions/getbyname('";endpointUri += targetRoleDefinitionName + "')/id" + "?@target='" + hostweburl + "'";executor.executeAsync({url: endpointUri,method: 'GET',headers: { 'accept':'application/json;odata=verbose' },success: function(responseData) {var jsonObject = JSON.parse(responseData.body)targetRoleDefinitionId = jsonObject.d.Id;breakRoleInheritanceOfList();},error: errorHandler});
}// Break role inheritance on the list.
function breakRoleInheritanceOfList() {var endpointUri = appweburl + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('";endpointUri += listTitle + "')/breakroleinheritance(true)?@target='" + hostweburl + "'";executor.executeAsync({url: endpointUri,method: 'POST',headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val() },success: deleteCurrentRoleForGroup,error: errorHandler});
}// Remove the current role assignment for the group on the list.
function deleteCurrentRoleForGroup() {var endpointUri = appweburl + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('";endpointUri += listTitle + "')/roleassignments/getbyprincipalid('" + groupId + "')?@target='" + hostweburl + "'";executor.executeAsync({url: endpointUri,method: 'POST',headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val(),'X-HTTP-Method':'DELETE'},success: setNewPermissionsForGroup,error: errorHandler});
}// Add the new role assignment for the group on the list.
function setNewPermissionsForGroup() {var endpointUri = appweburl + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('";endpointUri += listTitle + "')/roleassignments/addroleassignment(principalid=" + groupId;endpointUri += ",roledefid=" + targetRoleDefinitionId + ")?@target='" + hostweburl + "'";executor.executeAsync({url: endpointUri,method: 'POST',headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val() },success: successHandler,error: errorHandler});
}// Get parameters from the query string.
// For production purposes you may want to use a library to handle the query string.
function getQueryStringParameter(paramToRetrieve) {var params = document.URL.split("?")[1].split("&");for (var i = 0; i < params.length; i = i + 1) {var singleParam = params[i].split("=");if (singleParam[0] == paramToRetrieve) return singleParam[1];}
}function successHandler() {alert('Request succeeded.');
} function errorHandler(xhr, ajaxOptions, thrownError) {alert('Request failed: ' + xhr.status + '\n' + thrownError + '\n' + xhr.responseText);
}

示例二:jQuery AJAX请求

// Change placeholder values before you run this code.
var siteUrl = 'http://server/site';
var listTitle = 'List 1';
var groupName = 'Group A';
var targetRoleDefinitionName = 'Contribute';
var groupId;
var targetRoleDefinitionId;$(document).ready( function() {getTargetGroupId();
});// Get the ID of the target group.
function getTargetGroupId() {$.ajax({url: siteUrl + '/_api/web/sitegroups/getbyname(\'' + groupName + '\')/id',type: 'GET',headers: { 'accept':'application/json;odata=verbose' },success: function(responseData) {groupId = responseData.d.Id;getTargetRoleDefinitionId();},error: errorHandler});
}// Get the ID of the role definition that defines the permissions
// you want to assign to the group.
function getTargetRoleDefinitionId() {$.ajax({url: siteUrl + '/_api/web/roledefinitions/getbyname(\''+ targetRoleDefinitionName + '\')/id',type: 'GET',headers: { 'accept':'application/json;odata=verbose' },success: function(responseData) {targetRoleDefinitionId = responseData.d.Id;breakRoleInheritanceOfList();},error: errorHandler});
}// Break role inheritance on the list.
function breakRoleInheritanceOfList() {$.ajax({url: siteUrl + '/_api/web/lists/getbytitle(\'' + listTitle+ '\')/breakroleinheritance(true)',type: 'POST',headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val() },success: deleteCurrentRoleForGroup,error: errorHandler});
}// Remove the current role assignment for the group on the list.
function deleteCurrentRoleForGroup() {$.ajax({url: siteUrl + '/_api/web/lists/getbytitle(\'' + listTitle+ '\')/roleassignments/getbyprincipalid(' + groupId + ')',type: 'POST',headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val(),'X-HTTP-Method':'DELETE'},success: setNewPermissionsForGroup,error: errorHandler});
}// Add the new role assignment for the group on the list.
function setNewPermissionsForGroup() {$.ajax({url: siteUrl + '/_api/web/lists/getbytitle(\'' + listTitle+ '\')/roleassignments/addroleassignment(principalid='+ groupId + ',roledefid=' + targetRoleDefinitionId + ')',type: 'POST',headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val() },success: successHandler,error: errorHandler});
}function successHandler() {alert('Request succeeded.');
} function errorHandler(xhr, ajaxOptions, thrownError) {alert('Request failed: ' + xhr.status + '\n' + thrownError + '\n' + xhr.responseText);
}

本篇就介绍到这里。

SharePoint REST API - 使用REST接口对列表设置自定义权限相关推荐

  1. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表...

    写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...

  2. ios调用restful接口_Office 365 iOS SDK-如何调用SharePoint REST API

    所有iOS SDK示例均提供了用于访问邮件,日历,ODfB文件的工作代码,但没有一个示例显示如何访问SharePoint列表项.因此,我正在尝试在Swift中进行一个简单的REST调用,但始终出现以下 ...

  3. SharePoint REST API - 基本操作(一)

    博客地址:http://blog.csdn.net/FoxDave 本文讲述如何应用SharePoint的REST接口完成基本的增删查改操作. 使用SharePoint客户端API和REST服务进 ...

  4. WIN32 API GetLastError()返回值含义列表

    转载自:http://blog.csdn.net/ice197983/article/details/614451 返回值 含义 0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系 ...

  5. java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录

    java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录 1.准备工作 1.1 接口调用账户 1.2 下载 金蝶星空云 ...

  6. 淘宝店铺商品发布API(新)接口,店铺上传接口代码对接教程

    淘宝店铺商品发布API(新)接口,整理好一套淘宝店铺发布接口,店铺上传接口代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 ...

  7. uni-app跨域的解决以及如何封住api,请求接口

    uni-app跨域的解决以及如何封住api,请求接口 let request = function(url, data = {}, method = "GET") {return ...

  8. Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表

    Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表:  Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述 ...

  9. api.php phpcms,phpcms程序api怎么写接口

    易站通,带你玩转PHPCMS建站程序,让你更快的熟悉该程序下面让我们来学习吧 phpcms api怎么写接口? 最近自己开发了一套crm系统,想着如果将来能卖出去,能不能再界面动态调用自己网站的推荐信 ...

  10. SharePoint 调查列表的自定义错误页面

    场景: 使用SharePoint的调查列表做调查问卷的时候,我们经常要设置成不允许多次答复,这样的话每个人就只能答复一次. 问题: 可是这样会产生一个问题,就是如果一个人第二次答复的话,那么出现的错误 ...

最新文章

  1. 时间加减计算器_手机上的计算器这样也可以,太方便了,赶快转告家人朋友
  2. 【趣话编程】如果张东升是个程序员
  3. Nginx+SSL+Tomcat+CDN部署总结,已实践有效~
  4. Linux文本处理tr命令笔记
  5. Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
  6. axios网络请求框架源码解析
  7. python语法学习—打印九九乘法表
  8. 华谊兄弟:拟向阿里影业、腾讯等发行不超8.2亿股股票
  9. EF+MYSQL 闪退
  10. CRM系统实现企业管理高效协同
  11. Axure插入ArcGIS地图或天地图
  12. 中国天气网城市代码(全,已验证)
  13. 【Linux】rm -rf 删除命令
  14. 安利三款好用的音频剪辑软件,值得收藏
  15. 排序算法之---希尔排序(一看你就懂滴)
  16. 苏宁易购按关键字搜索suning商品 API 返回值说明
  17. 泰拉服务器生存模式物品修改,荒岛求生修改存档生存物品方法
  18. Atom使用教程:Atom下载,Atom汉化教程,Atom常用插件
  19. radis安装和使用
  20. 100个高频Spring面试题,助你一臂之力

热门文章

  1. PDF文件在线转换HTML的方法
  2. Go适合做什么?为何这么多人偏爱Go语言?
  3. mysql 误删表 恢复数据_MySQL误删数据或者误清空表恢复
  4. 清洁机器人--屏幕显示方案之屏幕的那些事
  5. 中望cad自定义快捷键命令_CAD如何设置新的命令快捷键
  6. 计算机类综述论文范文,综述的写法(计算机类论文综述的写法)
  7. linux新硬盘格式化,linux添加新硬盘并格式化
  8. Python for循环倒序遍历列表
  9. linux sed替换行,shell - 使用Sed替换包含字符串的整行
  10. 引擎开发-图形渲染器开发