1

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

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

4

2 回答 2

2

您可以通过打开一个“管理员”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 对象的成本相对较高。

于 2012-09-03T11:34:27.190 回答
0

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

  • 门户:共享点列表或文档库对象。
  • 角色:共享点提供的角色类型,如读取、设计等。
  • 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);
            }
}
于 2012-09-04T12:42:13.290 回答