如果用户在SharePoint中没有枚举权限,请检查当前用户的权限

时间:2012-09-03 08:02:10

标签: sharepoint

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

            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对象的权限?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以通过打开“admin”Web实例(创建SPSite对象并将System帐户的用户令牌传递给它)来实现。这样您就不必担心当前用户是否拥有足够的权限。

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对象相对较贵。

答案 1 :(得分:0)

这里我定义了一个获取SharePoint列表对象,角色类型和用户的函数。

  • portal:sharepoint列表或文档库对象。
  • 角色:由sharepoint提供的RoleType,如Read,Design等。
  • user:要向其授予门户角色的用户。

希望它会对你有所帮助。

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);
            }
}