本文讲述SharePoint 2010/2013 使用Javascript来判断权限的三种方法的实现方式及其优缺点。

1. 根据用户所在的SharePoint组(比如用户在Leader 组才可以使用审批按钮)

a. 优点,简单明了,容易理解,要获得这个权限只有一个入口,就是将用户加入到SharePoint组

b. 缺点, 不能兼容AD group套SharePoint组的情况,只能将用户直接加入到SharePoint组的情况下起作用

c. 实现代码如下:

  1. function IsCurrentUserMemberOfGroup(strGroupName, functionComplete) {
  2. //Setup Vars
  3. currentContext  = null;
  4. currentWeb  = null;
  5. allGroups   = null;
  6. leaderGroup     = null;
  7. currentUser     = null;
  8. groupUsers  = null;
  9. //Get an instance of the Client Content.
  10. currentContext = new SP.ClientContext.get_current();
  11. //Grab the client web object.
  12. currentWeb = currentContext.get_web();
  13. //Get the current user object
  14. currentUser = currentContext.get_web().get_currentUser();
  15. currentContext.load(currentUser);
  16. //Setup the groupColletion.
  17. allGroups = currentWeb.get_siteGroups();
  18. currentContext.load(allGroups);
  19. //Now populate the objects above.
  20. currentContext.executeQueryAsync(
  21. Function.createDelegate(this, GetAllGroupsExecuteOnSuccess),
  22. Function.createDelegate(this, ExecuteOnFailure)
  23. );
  24. // GroupCollection - Load - SUCCESS
  25. function GetAllGroupsExecuteOnSuccess(sender, args) {
  26. // CHECK THE GROUPS
  27. // Time to Enumerate through the group collection that was returned.
  28. var groupEnumerator = allGroups.getEnumerator();
  29. // Loop for the collection.
  30. while (groupEnumerator.moveNext()) {
  31. //Grab the Group Item.
  32. var group = groupEnumerator.get_current();
  33. if (group.get_title().indexOf(strGroupName) > -1) {
  34. // Now that we have the group let's grab the list of users.
  35. groupUsers = group.get_users();
  36. currentContext.load(groupUsers);
  37. currentContext.executeQueryAsync(
  38. Function.createDelegate(this, SingleGroupExecuteOnSuccess),
  39. Function.createDelegate(this, ExecuteOnFailure)
  40. );
  41. }
  42. }
  43. }
  44. // Single Group - Load - SUCCESS
  45. function SingleGroupExecuteOnSuccess(sender, args) {
  46. // Time to setup the Enumerator
  47. var groupUserEnumerator = groupUsers.getEnumerator();
  48. // This is the flag to set to true if the user is in the group.
  49. var boolUserInGroup = false;
  50. // and start looping.
  51. while (groupUserEnumerator.moveNext()) {
  52. //Grab the User Item.
  53. var groupUser = groupUserEnumerator.get_current();
  54. // and finally. If a Group User ID Matches the current user ID then they are in the group!
  55. if (groupUser.get_id() == currentUser.get_id()) {
  56. boolUserInGroup = true;
  57. }
  58. }
  59. //Run the delegate function with the bool;
  60. functionComplete(boolUserInGroup);
  61. }
  62. // GroupCollection or Single Group - Load - FAILURE
  63. function ExecuteOnFailure(sender, args) {
  64. //Run the delegate function and return false because there was no match.
  65. functionComplete(false);
  66. }
  67. }
  68. IsCurrentUserMemberOfGroup("Lead", function (isCurrentUserInGroup) {
  69. if(isCurrentUserInGroup)
  70. {
  71. // Do something for the user in the correct SP group
  72. }
  73. });
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. 代码实现如下:

  1. var currentUser;
  2. SP.SOD.executeFunc('sp.js', 'SP.ClientContext', GetCurrentUser);
  3. function GetCurrentUser() {
  4. var clientContext = new SP.ClientContext.get_current();
  5. var oWeb = clientContext.get_web();
  6. currentUser = oWeb.get_currentUser();
  7. clientContext.load(currentUser);
  8. clientContext.executeQueryAsync(Onsuccess, OnFailed);
  9. }
  10. function Onsuccess()
  11. {
  12. if(currentUser.get_isSiteAdmin())
  13. {
  14. // Do something for the user who is the current site collection admin
  15. }
  16. }
  17. function OnFailed(request, message)
  18. {
  19. alert('error'  + message);
  20. }
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. 代码实现如下:

  1. <script type="text/javascript">
  2. SP.SOD.executeFunc('sp.js', 'SP.ClientContext', CheckPermissionOnWeb);
  3. function CheckPermissionOnWeb() {
  4. context = new SP.ClientContext.get_current();
  5. web = context.get_web();
  6. this._currentUser = web.get_currentUser();
  7. context.load(this._currentUser);
  8. context.load(web, 'EffectiveBasePermissions');
  9. context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));
  10. }
  11. function onSuccessMethod(sender, args) {
  12. if (web.get_effectiveBasePermissions().has(SP.PermissionKind.manageWeb)) {
  13. // User Has permission to manage web
  14. //  Do something you want to do for the user who can manage the web
  15. }
  16. }
  17. Function onFailureMethod(sender, args)
  18. {
  19. alert('error'  +args.message);
  20. }
  21. </script>

原文地址:http://blog.csdn.net/abrahamcheng/article/details/17447479

[转]SharePoint 2010/2013 使用Javascript来判断权限的三种方法的更多相关文章

  1. [转]Javascript定义类的三种方法

    作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...

  2. JavaScript去除空格的三种方法(正则/传参函数/trim)

    方法一: 个人认为最好的方法.采用的是正则表达式,这是最核心的原理. 其次.这个方法使用了JavaScript 的prototype 属性 其实你不使用这个属性一样可以用函数实现.但这样做后用起来比较 ...

  3. JavaScript 复制变量的三种方法

    参考:Copying Objects in JavaScript - Orinami Olatunji(@orinamio_) October 23, 2017    直接将一个变量赋给另一个变量时, ...

  4. JavaScript RegExp 对象的三种方法

    JavaScript RegExp 对象有 3 个方法:test().exec() 和 compile().(1) test() 方法用来检测一个字符串是否匹配某个正则表达式,如果匹配成功,返回 tr ...

  5. JavaScript调用后台的三种方法实例(包含两种Ajax)

    方法一:直接使用<%=%>调用(ASPX页面) 前台JS,代码如下: <script type="text/javascript"> var methodS ...

  6. 获得Window窗口权限的三种方法

    1.第一种方法:利用视图控制器自带的View的window属性:  具体使用 self.view.window.rootViewController = ... 2.第二种方法:通过导入APPDele ...

  7. javascript生成对象的三种方法

    /** js生成对象的三种方法*/ // 1.通过new Object,然后添加属性 示例如下: var people1 = new Object(); people1.name = 'xiaohai ...

  8. javascript获取DOM对象三种方法

    1. getElementByID() getElementByID()方法可返回对拥有指定ID的第一个对象的引用 2. getElementByTagName() getElementByTagNa ...

  9. JavaScript实现选项卡(三种方法)

    本文实例讲述了js选项卡的实现方法. 一.html代码: <div id="div1"> <input class="active" type ...

随机推荐

  1. 分布式缓存BeIT Memcached简介

    分布式缓存BeIT Memcached简介 或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步.下面稍微介绍一下beitmemca ...

  2. 【Android】Android程序保护与破解浅析

    此文源自组内成员分享的PPT,其他成员的文档由于没有得到授权,暂不公开. 本文命令如果没有特殊注明,均为windows 7环境. 本文只涉及大概的知识点,不涉及具体的细节,需要注意. 反编译 apkt ...

  3. [Tommas] Web测试中,各类web控件测试点总结

    一 .界面检查 进入一个页面测试,首先是检查title,页面排版,字段等,而不是马上进入文本框校验 1.页面名称title是否正确 2.当前位置是否可见  您的位置:xxx>xxxx 3.文字格 ...

  4. Upgrading to EF6

    In previous versions of EF the code was split between core libraries (primarily System.Data.Entity.d ...

  5. Linux入门1

    在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于DOS下的command和后来的cmd.exe.它接收用户命令,然后调用相应的应用程序. Li ...

  6. Farewell, 2015, welcome 2016

    Farewell, 2015, welcome 2016.   ##事出必有因 从2014年10月份开始, 在投资的路上越走越远.  盲目的行为, 付出了惨重的代价. 投资无所谓对错, 但投资失败带来 ...

  7. classLoader (一)

    不说废话,上代码吧. 随便写一个类,他是由appclassLoader加载的 package classLoaderExample; class Bean { public void test() { ...

  8. PC 端 360 云盘初体验

    首先吐槽一下安装软件,文件名是 360wangpan,安装好后软件名称是"360云盘",好歹得统一下嘛,不然还以为下错了安装文件呢. 一般使用和其他网盘差不多,速度也还行,但还是没 ...

  9. poj 2367 Genealogical tree (拓扑排序)

    火星人的血缘关系很奇怪,一个人可以有很多父亲,当然一个人也可以有很多孩子.有些时候分不清辈分会产生一些尴尬.所以写个程序来让n个人排序,长辈排在晚辈前面. 输入:N 代表n个人 1~n 接下来n行 第 ...

  10. PHP数组操作汇总

    php 操作数组 (合并,拆分,追加,查找,删除等) - Just Code - ITeye技术网站 PHP操作数组的一些函数介绍 -- 简明现代魔法 PHP数组元素操作实例 -- 简明现代魔法 儿童 ...