Проблема активного каталога Sitecore с разрешениями и ролями в ролях

Вопрос

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

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

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

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

Подробнее

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

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

Роль, которую я тестирую, называется sitecore \ Content Author тем, что он имеет разрешения, которые я хочу, чтобы мои пользователи 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 \ 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)
}
5
задан Marko 31 March 2011 в 21:13
поделиться