Как переименовать роль с помощью членства в .NET?

Я использую членство в ASP.NET и заметил, что в Класс ролей нет метода для модифицировать роли (например, ее имени), только для их создания и удаления.

Это возможно или не поддерживается?

Обновлено: @CheGueVerra: Да, хорошее решение.

Вы знаете (за дополнительную плату :)), почему это невозможно?

Почему это невозможно: не в базовом классе [общедоступный абстрактный класс RoleProvider: ProviderBase] Почему они решили не реализовывать его, я пока не знаю;) Я позволю вам задать вопрос

CheGueVerra 12.11.2008 19:31
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
Один-единственный вредоносный запрос может нанести ущерб вашему бизнесу. Уязвимости вашего кода могут привести к:
6
1
4 726
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Программное переименование роли в модели членства ASP.NET было бы Плохой вещью ™, потому что имена ролей используются в файле конфигурации для определения разрешений. Если бы существовал программный способ изменения имени роли (который сохранял изменение в базе данных), вы бы немедленно нарушили любые конфигурации безопасности на основе ролей в web.config для любых веб-приложений, использующих базу данных, и не было бы возможности чтобы гарантировать, что одно веб-приложение может изменять конфигурацию каждого веб-приложения, использующего эту базу данных членства.

правда, но я не планирую использовать файл конфигурации, так как мои пользователи могут создавать новые роли, и они могут настраивать через приложение, к каким страницам будут иметь доступ новые роли. Мне нужно добавить проверку времени выполнения, поэтому в этом ограничении нет необходимости

juan 12.11.2008 05:36

И не произойдет ли то же самое, если вы удалите роль?

juan 12.11.2008 14:52
Ответ принят как подходящий

Нет прямого способа изменить имя роли в поставщике членства.

Я бы получил список пользователей, которые находятся в роли, которую вы хотите переименовать, затем удалил их из списка, удалил роль, создал роль с новым именем, а затем добавил пользователей, найденных ранее, в роль с новым именем.

public void RenameRoleAndUsers(string OldRoleName, string NewRoleName)
{
    string[] users = Roles.GetUsersInRole(OldRoleName);
    Roles.CreateRole(NewRoleName);
    Roles.AddUsersToRole(users, NewRoleName);
    Roles.RemoveUsersFromRole(users, OldRoleName);
    Roles.DeleteRole(OldRoleName);
}

Это изменит имя роли для всех пользователей в роли.

Последующие действия: роли используются для обеспечения того, чтобы пользователь играл только свою роль в системе, поэтому User.IsInRole (ROLE_NAME) поможет вам обеспечить соблюдение применимых ценных бумаг BR для пользователя и ролей, в которых он находится. Если вы может изменять имена ролей на лету, как вы собираетесь проверить, действительно ли пользователь находится в этой роли. Ну вот что я понял, когда спросил об этом.

rtpHarry edit: преобразованный образец псевдокода в компилируемый метод C#

Другие вопросы по теме