Проблема с активным каталогом Sitecore с разрешениями и ролями в ролях - PullRequest
5 голосов
/ 31 марта 2011

Вопрос

Я написал пользовательских провайдеров членства / роли / профиля для аутентификации пользователей в домене Active Directory.Я пытаюсь использовать роли-в-ролях, чтобы предоставить пользователям ADDOMAIN права на использование sitecore, добавив их группу AD в качестве члена соответствующей роли sitecore.Если я вхожу в систему как пользователь AD, у меня, похоже, нет разрешений для роли sitecore, однако, если я вхожу как пользователь sitecore в той же роли sitecore, я получаю разрешения.Есть ли что-то, чего мне не хватает в поставщиках членства / роли, которые мне нужно включить, чтобы сделать эту работу, или есть что-то еще в игре здесь?

Мы используем Sitecore версии 6.4, если это имеет какое-то значение.

РЕШЕНИЕ : Ответ @Yan полностью решил проблему.Проблема заключается в том, что языковые разрешения предоставляются явно только пользователям домена sitecore (через sitecore \ Everyone).При создании пользователей AD они находятся в другом домене и не наследуют эти языковые разрешения.Исправление заключается в предоставлении разрешений на чтение / запись специально для домена AD, или, как я уже сделал, создаю другую роль sitecore и назначаю необходимые разрешения этой роли, а затем назначаю мои роли AD этой роли.

Необходимо установить следующие разрешения: lang: read и lang: write в базе данных master в разделе / ​​System / Languages ​​/ [LANGUAGE: en в моем случае].Если вы не видите эти разрешения в редакторе безопасности, нажмите кнопку столбцы и выберите эти столбцы.

Подробнее

Заранее извиняюсь за уровень детализации.

Я написал собственных провайдеров членства / роли / профиля для аутентификации пользователей в домене Active Directory.Мы не используем модуль AD, предоставляемый sitecore, поскольку мы хотим, чтобы наши пользователи видели только определенные группы и пользователей вместо каждого пользователя / группы в AD.Я также только пытаюсь предоставить службы проверки подлинности и членства в ролях, поскольку не хочу, чтобы администраторы sitecore могли изменять пользователей или роли AD.

Роль, которую я тестирую, называется sitecore \Автор контента в том смысле, что он имеет разрешения, которые я хочу, чтобы мои пользователи AD имели.Пользователи AD входят в группу ADDOMAIN \ Web-Authors-Group внутри AD и внутри sitecore. Я настроил эту группу как принадлежащую к sitecore \ Content Author .Пользователь ADDOMAIN \ sitecoreauthor1 является членом ADDOMAIN \ Web-Authors-Group в AD, и у меня также есть пользователь sitecore sitecore \ bcauthor пользователь, который являетсячлен роли sitecore \ Content Author .Я также настроил отдельную роль sitecore под названием sitecore \ SecondAuthorRole и пользователя sitecore \ secondAuthor в этой роли, чтобы проверить, что функциональность ролей в ролях работает нормально.

В случае, если это сбивает с толку, вот визуальное представление:

Sitecore Roles

    sitecore\Content Author
      - sitecore\bcauthor
      - ADDOMAIN\Web-Authors-Group
      - sitecore\SecondAuthorRole
    sitecore\SecondAuthorRole
      - sitecore\secondAuthor

ActiveDirectory Groups

    ADDOMAIN\Web-Authors-Group
      - ADDOMAIN\sitecoreauthor1

Если я войду в систему как sitecore \ bcauthor , я могу сделать все, что sitecore \ Content Author роль может сделать.Если я войду как sitecore \ secondAuthor , я также могу сделать все, что может сделать роль sitecore \ Content Author .Однако если я войду в систему как пользователь ADDOMAIN \ sitecoreauthor1 , у меня, похоже, не будет каких-либо разрешений роли sitecore \ Content Author .

Еще больше информации

Разрешения для домашнего элемента (который я проверяю):

 ar|sitecore\Content Author|pe|+item:rename|+item:write|+item:delete|+item:create|pd|+item:rename|+item:write|+item:delete|+item:create

Код

Вот скелет классов, которые реализуют поставщиков только для чтения для членства, ролей и профиля:

Класс поставщика членства

public class DirectoryMembershipProvider : System.Web.Security.MembershipProvider
{
    public override string ApplicationName { get; set; }
    public override bool EnablePasswordReset { get { return false; } }
    public override bool EnablePasswordRetrieval { get { return false; } }
    public override int MaxInvalidPasswordAttempts { get { return 100; } }
    public override int MinRequiredNonAlphanumericCharacters { get { return 0; } }
    public override int MinRequiredPasswordLength { get { return 1; } }
    public override MembershipPasswordFormat PasswordFormat { get { return MembershipPasswordFormat.Clear; } }
    public override string PasswordStrengthRegularExpression { get { return ""; } }
    public override bool RequiresQuestionAndAnswer { get { return false; } }
    public override bool RequiresUniqueEmail { get { return false; } }

    // Not implemented
    public override bool ChangePassword(string username, string oldPassword, string newPassword)
    public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
    protected override byte[] DecryptPassword(byte[] encodedPassword)
    public override bool DeleteUser(string username, bool deleteAllRelatedData)
    protected override byte[] EncryptPassword(byte[] password)
    protected override byte[] EncryptPassword(byte[] password, MembershipPasswordCompatibilityMode legacyPasswordCompatibilityMode)
    protected override void OnValidatingPassword(ValidatePasswordEventArgs e)
    public override string ResetPassword(string username, string answer)
    public override bool UnlockUser(string userName)
    public override void UpdateUser(MembershipUser user)

    // Implemented functions
    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
    public override string GetPassword(string username, string answer)
    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    public override MembershipUser GetUser(string username, bool userIsOnline)
    public override string GetUserNameByEmail(string email)
    public override bool ValidateUser(string username, string password)
}

Поставщик роли

public class DirectoryRoleProvider : System.Web.Security.RoleProvider
{
    public override string ApplicationName { get; set; }

    // not implemented
    public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    public override void CreateRole(string roleName)
    public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
    public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)

    // implemented functions
    public override string[] FindUsersInRole(string roleName, string usernameToMatch)
    public override string[] GetAllRoles()
    public override string[] GetRolesForUser(string username)
    public override string[] GetUsersInRole(string roleName)
    public override bool IsUserInRole(string username, string roleName)
    public override bool RoleExists(string roleName)
}

ПрофильПровайдер

public class DirectoryProfileProvider : System.Web.Profile.ProfileProvider
{
    public override string ApplicationName { get; set; }

    public override int DeleteInactiveProfiles(ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate) { return 0; }
    public override int DeleteProfiles(ProfileInfoCollection profiles) { return 0; }
    public override int DeleteProfiles(string[] usernames) { return 0; }

    // not implemented
    public override ProfileInfoCollection FindInactiveProfilesByUserName(ProfileAuthenticationOption authenticationOption, string usernameToMatch, DateTime userInactiveSinceDate, int pageIndex, int pageSize, out int totalRecords)
    public override ProfileInfoCollection GetAllInactiveProfiles(ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate, int pageIndex, int pageSize, out int totalRecords)

    // implemented functions
    public override ProfileInfoCollection FindProfilesByUserName(ProfileAuthenticationOption authenticationOption, string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    public override ProfileInfoCollection GetAllProfiles(ProfileAuthenticationOption authenticationOption, int pageIndex, int pageSize, out int totalRecords)
    public override int GetNumberOfInactiveProfiles(ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate)
    public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection)
    public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection)
}

1 Ответ

8 голосов
/ 31 марта 2011

Честно говоря, я не прочитал весь текст, только часть вопроса.И я подозреваю, что знаю, в чем проблема.Это имеет отношение к языку: чтение и язык: права на запись.

Посмотрите мое последнее сообщение на этой ветке форума SDN .Не забудьте проверить прилагаемый архив с изображениями для лучшего понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...