Я новичок в ASP.NET Identity и борюсь с ролями. Мой предыдущий опыт работы с настольными приложениями (где мы явно не могли использовать ASP.NET Identity и в основном катали свои собственные роли), и мы обычно добавляли enum
для ролей. Это позволило нам однозначно сослаться на них в коде.
Для идентификации ASP.NET необходимы роли, хранящиеся в базе данных. Моя главная проблема в том, что мы не можем гарантировать, что все (все разработчики, тестовая и производственная базы данных) будут иметь одинаковые данные в наших базах данных. Используя enum
, данные жестко кодируются в коде, поэтому нет никакой двусмысленности.
Вторичная (но все еще очень важная) проблема заключается в том, что роли, похоже, полагаются на вас, используя жестко закодированные строки ...
[Authorize(Roles = "SomeRole")]
public IActionResult SomeAction() =>
View();
Это кажется хрупким. Слишком легко напечатать название роли, а что если мы захотим изменить имя? Мы должны были бы выследить каждый экземпляр жестко запрограммированной строки и изменить его.
Для пояснения, роли используются для ограничения доступа к определенным областям веб-сайта. У нас будет фиксированный набор ролей, который будет редко меняться. Если они меняются, код должен будет меняться вместе с ними, поэтому динамический доступ к ролям (например, через раздел CRUD сайта) не имеет смысла.
Можем ли мы сделать это? Если нет, то как нам обойти проблему знания того, как ссылаться на роли, которые могут не существовать?