[转]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 ...
随机推荐
- POJ_2566_Bound_Found_(尺取法+前缀和)
描述 http://poj.org/problem?id=2566 给出一个整数序列,并给出非负整数t,求数列中连续区间和的绝对值最接近k的区间左右端点以及这个区间和的绝对值. Bound Found ...
- jQuery的几个Grid插件简单比较
目标:实现一个类似于Excel功能的Grid数据维护功能,并且就地编辑在乎的是Cell编辑而不是行编辑 候选者:easy-ui之datagrid, jqgrid, flexigrid 使用环境:jqu ...
- Nginx与X-Sendfile
X-accel模块允许由后台通过返回的头来决定投递静态文件.为什么要这么做呢?试想一下我们经常碰到的这种情况,在有的论坛中,下载资源需要登录认证.权限核查.积分扣除或者是积分增加等等,对于Nginx来 ...
- Tomcat输出catalina.out的大小控制
资源URL:http://download.csdn.net/detail/attagain/7771065 Tomcat默认生成的日志文件catalina.out,随着时间的推移,逐渐增大,可能达到 ...
- bootstrap布局两列或者多列表单
1, 代码如下: <div class="form-group"> <label for="starttime" class="co ...
- 跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距
跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距 This example program demonstrates the basic usage of a circular meas ...
- 【HTML】Beginner6:Link
1.Link HTML wich basically means a system of linked text link to another HTML file or any file a ...
- 问题.NETSystem.Data.OleDb.OleDbException 操作必须使用一个可更新的查询
问题:System.Data.OleDb.OleDbException 操作必须使用一个可更新的查询 问题现象:用asp.net连access数据库,查询可以,插入数据报错.在.NET中F5可以使用方 ...
- 取正在运行的DLL或EXE的路径
function GetSelfPath: string;var ModuleName: string; i: Integer;begin SetLength(ModuleName, 255); ...
- HDU 4635 - Strongly connected(2013MUTC4-1004)(强连通分量)
t这道题在我们队属于我的范畴,最终因为最后一个环节想错了,也没搞出来 题解是这么说的: 最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯 ...