[转]SharePoint 2010/2013 使用Javascript来判断权限的三种方法
本文讲述SharePoint 2010/2013 使用Javascript来判断权限的三种方法的实现方式及其优缺点。
1. 根据用户所在的SharePoint组(比如用户在Leader 组才可以使用审批按钮)
a. 优点,简单明了,容易理解,要获得这个权限只有一个入口,就是将用户加入到SharePoint组
b. 缺点, 不能兼容AD group套SharePoint组的情况,只能将用户直接加入到SharePoint组的情况下起作用
c. 实现代码如下:
- function IsCurrentUserMemberOfGroup(strGroupName, functionComplete) {
- //Setup Vars
- currentContext = null;
- currentWeb = null;
- allGroups = null;
- leaderGroup = null;
- currentUser = null;
- groupUsers = null;
- //Get an instance of the Client Content.
- currentContext = new SP.ClientContext.get_current();
- //Grab the client web object.
- currentWeb = currentContext.get_web();
- //Get the current user object
- currentUser = currentContext.get_web().get_currentUser();
- currentContext.load(currentUser);
- //Setup the groupColletion.
- allGroups = currentWeb.get_siteGroups();
- currentContext.load(allGroups);
- //Now populate the objects above.
- currentContext.executeQueryAsync(
- Function.createDelegate(this, GetAllGroupsExecuteOnSuccess),
- Function.createDelegate(this, ExecuteOnFailure)
- );
- // GroupCollection - Load - SUCCESS
- function GetAllGroupsExecuteOnSuccess(sender, args) {
- // CHECK THE GROUPS
- // Time to Enumerate through the group collection that was returned.
- var groupEnumerator = allGroups.getEnumerator();
- // Loop for the collection.
- while (groupEnumerator.moveNext()) {
- //Grab the Group Item.
- var group = groupEnumerator.get_current();
- if (group.get_title().indexOf(strGroupName) > -1) {
- // Now that we have the group let's grab the list of users.
- groupUsers = group.get_users();
- currentContext.load(groupUsers);
- currentContext.executeQueryAsync(
- Function.createDelegate(this, SingleGroupExecuteOnSuccess),
- Function.createDelegate(this, ExecuteOnFailure)
- );
- }
- }
- }
- // Single Group - Load - SUCCESS
- function SingleGroupExecuteOnSuccess(sender, args) {
- // Time to setup the Enumerator
- var groupUserEnumerator = groupUsers.getEnumerator();
- // This is the flag to set to true if the user is in the group.
- var boolUserInGroup = false;
- // and start looping.
- while (groupUserEnumerator.moveNext()) {
- //Grab the User Item.
- var groupUser = groupUserEnumerator.get_current();
- // and finally. If a Group User ID Matches the current user ID then they are in the group!
- if (groupUser.get_id() == currentUser.get_id()) {
- boolUserInGroup = true;
- }
- }
- //Run the delegate function with the bool;
- functionComplete(boolUserInGroup);
- }
- // GroupCollection or Single Group - Load - FAILURE
- function ExecuteOnFailure(sender, args) {
- //Run the delegate function and return false because there was no match.
- functionComplete(false);
- }
- }
- IsCurrentUserMemberOfGroup("Lead", function (isCurrentUserInGroup) {
- if(isCurrentUserInGroup)
- {
- // Do something for the user in the correct SP group
- }
- });
function IsCurrentUserMemberOfGroup(strGroupName, functionComplete) {
//Setup Vars
currentContext = null;
currentWeb = null;
allGroups = null;
leaderGroup = null;
currentUser = null;
groupUsers = null;
//Get an instance of the Client Content.
currentContext = new SP.ClientContext.get_current();
//Grab the client web object.
currentWeb = currentContext.get_web();
//Get the current user object
currentUser = currentContext.get_web().get_currentUser();
currentContext.load(currentUser);
//Setup the groupColletion.
allGroups = currentWeb.get_siteGroups();
currentContext.load(allGroups);
//Now populate the objects above.
currentContext.executeQueryAsync(
Function.createDelegate(this, GetAllGroupsExecuteOnSuccess),
Function.createDelegate(this, ExecuteOnFailure)
);
// GroupCollection - Load - SUCCESS
function GetAllGroupsExecuteOnSuccess(sender, args) {
// CHECK THE GROUPS
// Time to Enumerate through the group collection that was returned.
var groupEnumerator = allGroups.getEnumerator();
// Loop for the collection.
while (groupEnumerator.moveNext()) {
//Grab the Group Item.
var group = groupEnumerator.get_current();
if (group.get_title().indexOf(strGroupName) > -1) {
// Now that we have the group let's grab the list of users.
groupUsers = group.get_users();
currentContext.load(groupUsers);
currentContext.executeQueryAsync(
Function.createDelegate(this, SingleGroupExecuteOnSuccess),
Function.createDelegate(this, ExecuteOnFailure)
);
}
}
}
// Single Group - Load - SUCCESS
function SingleGroupExecuteOnSuccess(sender, args) {
// Time to setup the Enumerator
var groupUserEnumerator = groupUsers.getEnumerator();
// This is the flag to set to true if the user is in the group.
var boolUserInGroup = false;
// and start looping.
while (groupUserEnumerator.moveNext()) {
//Grab the User Item.
var groupUser = groupUserEnumerator.get_current();
// and finally. If a Group User ID Matches the current user ID then they are in the group!
if (groupUser.get_id() == currentUser.get_id()) {
boolUserInGroup = true;
}
}
//Run the delegate function with the bool;
functionComplete(boolUserInGroup);
}
// GroupCollection or Single Group - Load - FAILURE
function ExecuteOnFailure(sender, args) {
//Run the delegate function and return false because there was no match.
functionComplete(false);
}
}
IsCurrentUserMemberOfGroup("Lead", function (isCurrentUserInGroup) {
if(isCurrentUserInGroup)
{
// Do something for the user in the correct SP group
}
});
2. 使用User 类的isSiteAdmin属性
a. 优点:需要写代码少,效率高
b. 缺点:只能判断用户是否为当前站点集管理员,适用场景很少
c. 代码实现如下:
- var currentUser;
- SP.SOD.executeFunc('sp.js', 'SP.ClientContext', GetCurrentUser);
- function GetCurrentUser() {
- var clientContext = new SP.ClientContext.get_current();
- var oWeb = clientContext.get_web();
- currentUser = oWeb.get_currentUser();
- clientContext.load(currentUser);
- clientContext.executeQueryAsync(Onsuccess, OnFailed);
- }
- function Onsuccess()
- {
- if(currentUser.get_isSiteAdmin())
- {
- // Do something for the user who is the current site collection admin
- }
- }
- function OnFailed(request, message)
- {
- alert('error' + message);
- }
var currentUser;
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', GetCurrentUser);
function GetCurrentUser() {
var clientContext = new SP.ClientContext.get_current();
var oWeb = clientContext.get_web();
currentUser = oWeb.get_currentUser();
clientContext.load(currentUser);
clientContext.executeQueryAsync(Onsuccess, OnFailed);
}
function Onsuccess()
{
if(currentUser.get_isSiteAdmin())
{
// Do something for the user who is the current site collection admin
}
}
function OnFailed(request, message)
{
alert('error' + message);
}
3. 使用 EffectiveBasePermissions,这个也是微软推荐的做法
a. 优点:功能上基本没有限制,可以检查所有SharePoint的权限级别: http://msdn.microsoft.com/en-us/library/ee556747(v=office.14).aspx
b. 缺点:获得权限的入口不是唯一的,可以单独给用户权限,也可以由用户加入到某个组来获取权限
c. 代码实现如下:
- <script type="text/javascript">
- SP.SOD.executeFunc('sp.js', 'SP.ClientContext', CheckPermissionOnWeb);
- function CheckPermissionOnWeb() {
- context = new SP.ClientContext.get_current();
- web = context.get_web();
- this._currentUser = web.get_currentUser();
- context.load(this._currentUser);
- context.load(web, 'EffectiveBasePermissions');
- context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));
- }
- function onSuccessMethod(sender, args) {
- if (web.get_effectiveBasePermissions().has(SP.PermissionKind.manageWeb)) {
- // User Has permission to manage web
- // Do something you want to do for the user who can manage the web
- }
- }
- Function onFailureMethod(sender, args)
- {
- alert('error' +args.message);
- }
- </script>
原文地址:http://blog.csdn.net/abrahamcheng/article/details/17447479
[转]SharePoint 2010/2013 使用Javascript来判断权限的三种方法的更多相关文章
- [转]Javascript定义类的三种方法
作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...
- JavaScript去除空格的三种方法(正则/传参函数/trim)
方法一: 个人认为最好的方法.采用的是正则表达式,这是最核心的原理. 其次.这个方法使用了JavaScript 的prototype 属性 其实你不使用这个属性一样可以用函数实现.但这样做后用起来比较 ...
- JavaScript 复制变量的三种方法
参考:Copying Objects in JavaScript - Orinami Olatunji(@orinamio_) October 23, 2017 直接将一个变量赋给另一个变量时, ...
- JavaScript RegExp 对象的三种方法
JavaScript RegExp 对象有 3 个方法:test().exec() 和 compile().(1) test() 方法用来检测一个字符串是否匹配某个正则表达式,如果匹配成功,返回 tr ...
- JavaScript调用后台的三种方法实例(包含两种Ajax)
方法一:直接使用<%=%>调用(ASPX页面) 前台JS,代码如下: <script type="text/javascript"> var methodS ...
- 获得Window窗口权限的三种方法
1.第一种方法:利用视图控制器自带的View的window属性: 具体使用 self.view.window.rootViewController = ... 2.第二种方法:通过导入APPDele ...
- javascript生成对象的三种方法
/** js生成对象的三种方法*/ // 1.通过new Object,然后添加属性 示例如下: var people1 = new Object(); people1.name = 'xiaohai ...
- javascript获取DOM对象三种方法
1. getElementByID() getElementByID()方法可返回对拥有指定ID的第一个对象的引用 2. getElementByTagName() getElementByTagNa ...
- JavaScript实现选项卡(三种方法)
本文实例讲述了js选项卡的实现方法. 一.html代码: <div id="div1"> <input class="active" type ...
随机推荐
- 分布式缓存BeIT Memcached简介
分布式缓存BeIT Memcached简介 或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步.下面稍微介绍一下beitmemca ...
- 【Android】Android程序保护与破解浅析
此文源自组内成员分享的PPT,其他成员的文档由于没有得到授权,暂不公开. 本文命令如果没有特殊注明,均为windows 7环境. 本文只涉及大概的知识点,不涉及具体的细节,需要注意. 反编译 apkt ...
- [Tommas] Web测试中,各类web控件测试点总结
一 .界面检查 进入一个页面测试,首先是检查title,页面排版,字段等,而不是马上进入文本框校验 1.页面名称title是否正确 2.当前位置是否可见 您的位置:xxx>xxxx 3.文字格 ...
- Upgrading to EF6
In previous versions of EF the code was split between core libraries (primarily System.Data.Entity.d ...
- Linux入门1
在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于DOS下的command和后来的cmd.exe.它接收用户命令,然后调用相应的应用程序. Li ...
- Farewell, 2015, welcome 2016
Farewell, 2015, welcome 2016. ##事出必有因 从2014年10月份开始, 在投资的路上越走越远. 盲目的行为, 付出了惨重的代价. 投资无所谓对错, 但投资失败带来 ...
- classLoader (一)
不说废话,上代码吧. 随便写一个类,他是由appclassLoader加载的 package classLoaderExample; class Bean { public void test() { ...
- PC 端 360 云盘初体验
首先吐槽一下安装软件,文件名是 360wangpan,安装好后软件名称是"360云盘",好歹得统一下嘛,不然还以为下错了安装文件呢. 一般使用和其他网盘差不多,速度也还行,但还是没 ...
- poj 2367 Genealogical tree (拓扑排序)
火星人的血缘关系很奇怪,一个人可以有很多父亲,当然一个人也可以有很多孩子.有些时候分不清辈分会产生一些尴尬.所以写个程序来让n个人排序,长辈排在晚辈前面. 输入:N 代表n个人 1~n 接下来n行 第 ...
- PHP数组操作汇总
php 操作数组 (合并,拆分,追加,查找,删除等) - Just Code - ITeye技术网站 PHP操作数组的一些函数介绍 -- 简明现代魔法 PHP数组元素操作实例 -- 简明现代魔法 儿童 ...