Проверка разрешений пользователя с семейством сайтов - PullRequest
3 голосов
/ 15 октября 2010

Я хочу проверить, есть ли у пользователя разрешения на семейство сайтов.Но я не знаю, как использовать SPSite.DoesUserHavePermissions().

Что такое SPReusableAcl?Как я могу получить его для проверки прав доступа пользователя?

Ответы [ 3 ]

1 голос
/ 17 октября 2010

Разве статья MSDN ( SPWeb.DoesUserHavePermissions Method (String, SPBasePermissions) ) вам не помогает? Пример кода можно использовать для проверки, имеет ли пользователь доступ к семейству сайтов:

using System;
using Microsoft.SharePoint;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("http://localhost"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    // Make sure the current user can enumerate permissions.
                    if (web.DoesUserHavePermissions(SPBasePermissions.EnumeratePermissions))
                    {
                        // Specify the permission to check.
                        SPBasePermissions permissionToCheck = SPBasePermissions.ManageLists;
                        Console.WriteLine("The following users have {0} permission:", permissionToCheck);

                        // Check the permissions of users who are explicitly assigned permissions.
                        SPUserCollection users = web.Users;
                        foreach (SPUser user in users)
                        {
                            string login = user.LoginName;
                            if (web.DoesUserHavePermissions(login, permissionToCheck))
                            {
                                Console.WriteLine(login);
                            }
                        }
                    }
                }
            }
            Console.ReadLine();
        }
    }
}

В приведенном выше примере кода вам просто нужно изменить URL вашего сайта и переменную permissionToCheck. SPBasePermissions имеет много возможных разрешений для проверки, перечисление вы можете увидеть здесь ( SPBasePermissions Enumeration ).

На самом деле существует множество руководств по проверке разрешений некоторых пользователей, и вы не ограничены DoesUserHavePermissions, см. Следующий Поиск Google .

0 голосов
/ 27 марта 2015

SPSite.DoesUserHavePermissions (SPReusableAcl, SPBasePermissions);

0 голосов
/ 26 сентября 2011

Как обычно, примеры MSDN предоставляют хорошие примеры из учебников, которые не всегда применимы к реальным сценариям.

В контексте страницы приложения, работающей в SharePoint 2010, из того, что я понимаю, этот код должен быть заключен в вызов RunWithElevatedPrivileges, и даже тогда, как следует из моего комментария, кажется, что есть подразумеваемая перехват22 в требованиях.Это работает для меня (LoginName - это просто имя пользователя FBA или «домен \ пользователь» для пользователя AD для сайта - в нашем случае используется адрес электронной почты):

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite elevatedSite = new SPSite(siteCollectionUrl))
    {
        foreach (SPSite siteCollection in elevatedSite.WebApplication.Sites)
        {
            using (SPWeb elevatedWeb = siteCollection.OpenWeb())
            {
                bool allowUnsafeUpdates = elevatedWeb.AllowUnsafeUpdates;
                bool originalCatchValue = SPSecurity.CatchAccessDeniedException;
                SPSecurity.CatchAccessDeniedException = false;

                try
                {
                    elevatedWeb.AllowUnsafeUpdates = true;

                    // You can't verify permissions if the user does not exist and you
                    // can't ensure the user if the user does not have access so we
                    // are stuck with a try-catch
                    SPUser innerUser = elevatedWeb.EnsureUser(loginName);

                    if (null != innerUser)
                    {
                        string splogin = innerUser.LoginName;
                        if (!string.IsNullOrEmpty(splogin) && elevatedWeb.DoesUserHavePermissions(splogin, SPBasePermissions.ViewPages))
                        {
                            // this user has permissions; any other login - particularly one that
                            // results in an UnauthorizedAccessException - does not
                        }
                    }
                }
                catch (UnauthorizedAccessException)
                {
                    // handle exception
                }
                catch (Exception)
                {
                    // do nothing
                }
                finally
                {
                    elevatedWeb.AllowUnsafeUpdates = allowUnsafeUpdates;
                    // reset the flag
                    SPSecurity.CatchAccessDeniedException = originalCatchValue;
                }
            }
        }
    }
});     
...