JS 端判断当前用户是否在某个SharePoint group (包含用户在AD组,然后将AD组加入到SP的组的情况)

本文讲述 JS 端如何判断当前用户是否在某个SharePoint group (包含用户在AD组,然后将AD组加入到SP的组的情况).

笔者曾经总结过JS端判断用户权限的三种方式: http://blog.csdn.net/abrahamcheng/article/details/17447479

但是实际需求中判断某个用户是否在哪个组是非常常见的,正如前面文章中所说,JS端判断当前用户是否在哪个组,只适用用于将用户直接加到SP group这种情况,针对用户在AD组,然后将AD组加入到SP的组的情况却无能为力。但现实需求中都是将用户加到AD组中,然后将AD组加入到SP group 中。怎么解决这个问题呢? 本文将给出一个解决方案。

首先从后端,使用C#是可以判断当前用户是否在某个SP group 中(包含用户在AD组,然后将AD组加入到SP的组的情况):

  public static bool IsCurrentUserInGroup(string groupName)
        {
            SPGroup group = null;
            bool result = false;
            SPWeb web = SPContext.Current.Web;
            if (!string.IsNullOrWhiteSpace(groupName))
            {
                try
                {
                    group = web.Groups[groupName];
                }
                catch (Exception ex)
                {
                    Helper.WriteException(ex, "IsCurrentUserInGroup");

                    try
                    {
                        group = web.SiteGroups[groupName];
                    }
                    catch (Exception innerEx)
                    {
                        Helper.WriteException(innerEx, "IsCurrentUserInGroup");
                    }
                }
            }

            if (null == group)
            {
                result = false;
            }
            else
            {
                result = web.IsCurrentUserMemberOfGroup(group.ID) || group.ContainsCurrentUser;
            }

            return result;
        }

那么就可以添加一个ashx来调用后台的C#代码:

  public partial class IsCurrentUserInGroup : IHttpHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            context.Response.ContentType = "application/json";
            var jsonResult = new JosnResult();
            string group = context.Request.QueryString.Get("group");
            try
            {
                if (string.IsNullOrWhiteSpace(group))
                {
                    jsonResult.Data.Add(false);
                }
                else
                {
                    jsonResult.Data.Add(Helper.IsCurrentUserInGroup(group));
                }
            }
            catch (Exception ex)
            {
                jsonResult.ErrorMessage = string.Format("Error message:{0}, group name:{1}", ex.Message,group);
                Helper.WriteException(ex, "IsCurrentUserInGroup.ProcessRequest");
            }

            context.Response.Write(jsonSerializer.Serialize(jsonResult));
        }
    }

JosnResult 定义如下(用于传递结果给前台):

 public class JosnResult
    {
       public string ErrorMessage { get; set; }
       public List<object> Data { get; set; }
       public string Position {get; set;}

       public JosnResult()
       {
           this.Data = new List<object>();
       }
    }

JS端调用代码为:

ExecuteOrDelayUntilScriptLoaded(CheckIfCurrentUserInGroup, 'sp.js');
function CheckIfCurrentUserInGroup() {
    var clientContext = new SP.ClientContext.get_current();

    var url =  clientContext.get_url() + "/_layouts/15/.../IsCurrentUserInGroup.ashx?group=" + encodeURI("SP Group Name");
    var data = null;
    $.ajax({
        type: 'GET',
        data: JSON.stringify(data),
        dataType: 'json',
        contentType: 'application/json',
        url: url
        })
        .done(function (result) {
            console.log(result.Data);
            console.log(result.ErrorMessage);
            if (result.Data.length > 0) {
                if (result.Data[0]) {
                    // Do some thing if the current user in the specified group
                }
                else {
                   // Do some thing if the current user is not in the specified group
                }
            }
        })
        .fail(function (errorMessage) {
            console.error(errorMessage);
        })
        .always(function () {

        });
}
时间: 2024-10-07 06:28:56

JS 端判断当前用户是否在某个SharePoint group (包含用户在AD组,然后将AD组加入到SP的组的情况)的相关文章

sharepoint 2013:活动目录迁移用户后,在sharepoint中move 用户 powershell

Get-SPUser -web http://wfe1  | fl    (查看该网站集中的账户) $user = Get-SPUser -web http://wfe1 -Identity 18   (将id为18的账户赋予变量$user ,不用变量下面一条语句会失败,18也可以用用户名取代) Move-SPUser -IgnoreSID -Identity $user -NewAlias 'test\sale02'   (将该账户迁移为新账户,可以在同一个域中,也可以不同域) 该操作在web

js 设备判断(移动端pc端 安卓ios 微信)

苹果安卓判断 1 $(function () { 2 var u = navigator.userAgent, app = navigator.appVersion; 3 var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g 4 var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 5 if (isAndroid) { 6 al

js如何判断一个元素是否获得焦点

js如何判断一个元素是否获得焦点:可能在实际应用中需求不多,也或许使用以下方式判断过于直白,不过原理总是那么回事,下面就是一个简单的判断元素是否获得焦点的例子,代码如下: $("#theid").click(function(){ var act = document.activeElement.id; if(act=="theid" ){ alert("获取焦点了"); } else{ alert("没有获取焦点"); }

通过js自动判断移动终端设备(ios\android等)

当用户用移动设备扫描一个二维码是,将扫描后的链接链接到一个页面,该页面只包含判断移动终端设备的js,判断好后自动跳转到对应的链接 或下载对应的内容. html代码如下: 1 <script> 2 var browser = { 3 versions: function() { 4 var u = navigator.userAgent, app = navigator.appVersion; 5 return {//移动终端浏览器版本信息 6 trident: u.indexOf('Tride

js快速判断IE浏览器(兼容IE10与IE11)

在很多时候,我们一般采用navigator.userAgent和正则表达来判断IE浏览器版本,下面介绍用IE浏览器中不同特性来判断IE浏览器   1 判断IE浏览器与非IE 浏览器 IE浏览器与非IE浏览器的区别是IE浏览器支持ActiveXObject,但是非IE浏览器不支持ActiveXObject.在IE11浏览器还没出现的时候我们判断IE和非IE经常是这么写的 ? 1 2 3 function isIe(){        return window.ActiveXObject ? tr

JS 微信判断及分享参数修改

var iswechat = (window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'); var cloc = location.href.replace(/^#/, "").replace(/[^\/]*\.[^\/*]+$/, ""); var mainTitle = "", mainDesc = "",

js怎么判断浏览器类型

<script type="text/javascript"> function isIE(){ return navigator.appName.indexOf("Microsoft Internet Explorer")!=-1 && document.all; } function isIE6() { return navigator.userAgent.split(";")[1].toLowerCase().i

T端判断装备等级

GetProto()->ItemLevel 判断装备等级 HandleBattleFieldPortOpcode 进入战场,. bool ChatHandler::HandlegetHitemlvlCommand(const char* args) { Player* target; uint64 target_guid; std::string target_name; uint32 itemlevel = 0; if (!extractPlayerTarget((char*)args,&

js类型判断及鸭式辨型

目录 instanceof constructor 构造函数名字 鸭式辨型 三种检测对象的类方式: instanceof.constructor .构造函数名字 用法如下: 1)instanceof console.log([1,2,3] instanceof Array); true console.log([1,2,3] instanceof Object); true 尽管构造函数是原型的唯一标识,instanceof运算符的右操作数是构造函数,instanceof实际计算过程中检测的是对