我有一个与SharePoint(MOSS 2007)解决方案集成的自定义Web应用程序。我想在此自定义Web应用程序中添加基于角色的页面访问权限,只有指定SharePoint组中的用户或具有特定角色的用户才能访问它们。其他用户被发送到默认的OOTB网页,并显示“您未被授权查看此页面”的消息。
有人能指出我如何实现这一点的教程,以及如何控制每个自定义页面的访问权限?
请注意,这些网页是自定义网络应用程序的一部分,并且通过SharePoint API或界面 NOT 创建。
谢谢,MagicAndi。
更新
为了让您了解,我希望有一个解决方案,我们可以利用SharePoint功能扩展安全修整或项目权限,以限制对自定义Web应用程序页面的访问。我已经有代码在页面加载时检查用户的SPGroup,并在需要时重定向。感谢。
答案 0 :(得分:3)
我对我当前的项目有类似的设置,我稍微改了一下以使你的问题更有意义,我们使用基类来定制自定义网页,例如:
public abstract class WebPageBase : Page
{
public SPBasePermissions PagePermissionFlag;
public override void OnInit(EventArgs e)
{
SPWeb web = SPContext.Current.Web;
if(!web.DoesUserHavePermissions(PagePermissionFlag))
{
// build the access denied page
SPUtility.Redirect(SPUtility.AccessDeniedPage + "?Source=" + SPHttpUtility.UrlKeyValueEncode(web.Site.MakeFullUrl(Request.RawUrl)),
SPRedirectFlags.RelativeToLayoutsPage,
HttpContext.Current);
}
}
}
然后在页面本身上定义权限:
public class ContentPage : WebPageBase
{
protected void Page_PreInit(Object sender, EventArgs e)
{
PagePermissionFlag = SPBasePermissions.ViewFormPages;
}
}
注意:您也可以在以下位置设置:
<%@Page PagePermissionFlagString="SPBasePermissions.ViewFormPages"%> *
*您必须将字符串转换为WebPageBase中的枚举
仅供参考,这个额外的位与上面的实现无关,它是我们在内部使用它的方式:
public static class CurrentUser
{
public static bool IsAdmin
{
get
{
return SPContext.Current.Web.DoesUserHavePermissions(SPBasePermissions.ManageWeb);
}
}
public static bool IsReader
{
get
{
return SPContext.Current.Web.DoesUserHavePermissions(SPBasePermissions.ViewFormPages);
}
}
}
答案 1 :(得分:1)
您必须对页面实施ItemLevel安全性。转到“页面库”并选择“页面属性”和“声明项目权限”,中断其中的“权限”,并仅添加要授予其访问权限的用户。如果要将其添加到多个文件,可以将它们分组到单独的文件夹中,并单独应用这些文件夹的权限。
当有人试图查看他不应该看到的页面时,SharePoint会自动发送“拒绝访问页面”。
如果您在页面上应用项目级别权限,则SharePOint会自动应用安全修整,以便只能看到他有权访问的页面而不是其他页面。
答案 2 :(得分:0)
查看Sharepoint公开的用户和组Web服务。您的自定义Web应用程序可以调用其方法以获取有关当前用户配置文件的信息。
例如,UserGroup.GetUserInfo()方法返回IsSiteAdmin标志,该标志可以回答您的问题。