我有一个作为SharePoint在保存服务器上运行的服务。我可以使用此服务上传/移动不同SharePoint网站上的文档库中的文件。我现在正在尝试检查用户(DOMAIN \ USER)是否有权访问特定的SharePoint站点。
我尝试过使用以下内容:
web.EnsureUser("DOMAIN\USER")
web.CheckPermissions(SPBasePermissions.Open)
如果用户没有权限,上面应该引发UnauthorizedAccessException。对我而言,它永远不会引发任何异常,尽管该用户无权访问此特定站点(通过尝试访问用户计算机上的站点进行验证 - 未经授权的401)
web.DoesUserHavePermissions("DOMAIN\USER", SPBasePermissions.Open)
上面应该返回True或False,但对我来说它总是返回False,当用户有权访问某个站点时(通过访问用户机器上的站点验证 - OK 200)。
web.GetUserEffectivePermissions("DOMAIN\USER")
上面应该返回权限掩码,但它总是返回一个EmptyMask。
我认为我不理解这些方法,但在互联网上的任何地方都没有很好地描述它们。
有谁知道如何检查用户是否具有访问SharePoint网站所需的权限?
答案 0 :(得分:2)
我和你的问题一样。我以“domain \ username”格式传递用户名,但它将所有权限都返回false。最后,我意识到我正在使用基于声明的SharePoint身份验证。我将用户名更改为声明格式“i:0#.w | domain \ username”,之后它开始完美运行。希望这会有所帮助。
以下是一个示例工作代码 -
var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
string userName = @"i:0#.w|domain\username";
var userPermissions = clientContext.Web.GetUserEffectivePermissions(userName);
clientContext.ExecuteQuery();
foreach (var permission in Enum.GetValues(typeof(PermissionKind)).Cast<PermissionKind>())
{
var permissionName = Enum.GetName(typeof(PermissionKind), permission);
var hasPermission = userPermissions.Value.Has(permission);
Response.Write(String.Format("<br>Permission: {0}, HasPermission: {1}", permissionName, hasPermission));
}
}
来源 - http://tech-turf.blogspot.in/2015/12/sharepoint-2013-getusereffectivepermiss.html