Запретить доступ к пользовательским страницам веб-приложений пользователям, не являющимся администраторами, в SharePoint
-
05-07-2019 - |
Вопрос
У меня есть пользовательское веб-приложение, которое интегрируется с решением SharePoint (MOSS 2007).Я хотел бы добавить доступ на основе ролей к страницам в этом пользовательском веб-приложении, чтобы доступ к ним имели только пользователи из указанной группы SharePoint или с определенной ролью.Другие пользователи отправляются на веб-страницу OOTB по умолчанию с сообщением "Вы не авторизованы для просмотра этой страницы".
Кто-нибудь может указать мне на руководства о том, как это реализовать и как контролировать доступ на каждой пользовательской странице?
Пожалуйста, обратите внимание, что эти страницы являются частью пользовательского веб-приложения и НЕ создается с помощью SharePoint API или интерфейса.
Спасибо, Мэджиканди.
Обновить
Просто чтобы вы знали, я надеюсь на решение, в котором мы сможем использовать функциональность SharePoint для расширения настроек безопасности или разрешений элементов для ограничения доступа к страницам пользовательских веб-приложений.У меня уже есть код для проверки SPGroup пользователя при загрузке страницы и перенаправления, если требуется.Спасибо.
Решение
У меня есть аналогичная настройка в моем текущем проекте, я немного изменил ее, чтобы придать больше смысла вашему вопросу, мы используем базовый класс для пользовательских веб-страниц, что-то вроде:
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"%> *
* вам нужно будет преобразовать строку в перечисление в базе веб-страниц)
Просто для справки, этот дополнительный бит не связан с описанной выше реализацией, это то, как мы используем его внутренне:
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);
}
}
}
Другие советы
Вам нужно будет внедрить безопасность ItemLevel на страницах.Перейдите в библиотеку Pages и выберите свойство Pages и укажите Разрешения элемента, отключите в нем Разрешение и добавьте только тех пользователей, которым вы хотите предоставить доступ.В случае, если вы хотите добавить это к нескольким файлам, вы можете сгруппировать их в отдельные папки и применить разрешение только к этим папкам.
И когда кто-то пытается просмотреть страницу, которую он не должен видеть, SharePoint автоматически отправляет ему сообщение Об отказе в доступе к странице.
Если вы применяете к странице разрешение уровня элемента, SharePoint автоматически применяет параметры безопасности, чтобы были видны только те Страницы, к которым у пользователя есть доступ, а не другие.
Взгляните на веб-службу пользователей и групп, предоставляемую Sharepoint.Ваше пользовательское веб-приложение может вызывать свои методы для получения информации о текущем профиле пользователя.
Например, UserGroup.Метод GetUserInfo() возвращает флаг IsSiteAdmin, который может ответить на ваш вопрос.