检查当前用户';s权限(如果用户在SharePoint中没有枚举权限)

检查当前用户';s权限(如果用户在SharePoint中没有枚举权限),sharepoint,Sharepoint,如我们所知,我们可以通过以下方式检查用户的权限: using (SPWeb web = site.OpenWeb(path)) { SPUser user = SPContext.Current.Web.CurrentUser; string loginName = user.LoginName; if (web.DoesUserHavePermissi

如我们所知,我们可以通过以下方式检查用户的权限:

            using (SPWeb web = site.OpenWeb(path))
            {
                SPUser user = SPContext.Current.Web.CurrentUser;
                string loginName = user.LoginName;
                if (web.DoesUserHavePermissions(SPBasePermissions.EnumeratePermissions))
                {
                    if (web.DoesUserHavePermissions(user.LoginName, SPBasePermissions.Open))
                    {
                        //do something
                    }
                }
            }

我的问题是,如果当前用户没有枚举权限,如何获取SharePoint对象的权限?提前感谢。

您可以通过打开一个“admin”web实例(创建一个
SPSite
对象并向其传递系统帐户的用户令牌)来完成此操作。这样,您就不必担心当前用户是否拥有足够的权限

SPUserToken adminToken = SPContext.Current.Web.AllUsers["SHAREPOINT\\System"].UserToken;
using (SPSite adminSite= new SPSite(SPContext.Current.Site.ID, adminToken) ) {
   using (SPWeb adminWeb = adminSite.OpenWeb(SPContext.Current.Web.ID)){
      if (adminWeb.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open)) {
            //do something 
      }
   }
}

当然,最好不要在每次加载页面时都这样做,因为创建和处理SPSite/SPWeb对象的成本相对较高。

这里我定义了一个函数,该函数接受SharePoint列表对象、角色类型和用户

  • 门户:sharepoint列表或文档库对象
  • 角色:sharepoint提供的角色类型,如阅读、设计等
  • 用户:要向其授予门户上角色的用户
希望它能帮助你

public static void AssignPermissionToPortal(string portal, SPRoleType role, SPUser user)
        {
            try
            {
                // Run with elevated privileges  
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite site = new SPSite(SPContext.Current.Web.Site.ID))
                    {
                        using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
                        {
                            web.AllowUnsafeUpdates = true;

                            SPList portalList = SPListHelper.GetSPList(portal, web);
                            portalList.BreakRoleInheritance(false);

                            //Add Readers on portal
                            SPRoleDefinition permission = web.RoleDefinitions["Read"];

                            if (role == SPRoleType.Administrator)
                                permission = web.RoleDefinitions["Full control"];
                            else if (role == SPRoleType.Contributor)
                                permission = web.RoleDefinitions["Contribute"];
                            else if (role == SPRoleType.WebDesigner)
                                permission = web.RoleDefinitions["Design"];
                            else
                                permission = web.RoleDefinitions["Read"];

                            // Check the user Role on site level.
                            SPUser roleUser = uHelper.GetUserById(user.ID);

                            if (roleUser != null)
                            {
                                SPRoleAssignment assignment = new SPRoleAssignment(roleUser);
                                assignment.RoleDefinitionBindings.Add(permission);

                                portalList.RoleAssignments.Add(assignment);
                                portalList.Update();
                            }

                            web.AllowUnsafeUpdates = false;
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                Log.WriteException(ex);
            }
}

@bzlm我指的是SharePoint权限,如“读取”、“仅查看”、“完全控制”等。如果您愿意,我们可以将其移动到我们的SharePoint网站,在那里您可能会得到更好的答案。如果要执行此操作,请标记或@message me@Kev♦ 我很高兴你能为我做这件事。