本文讲述 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 () {
});
}