Нестроковая роль называет в ASP.NET MVC?

Запись в .htaccess:)

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
26
задан MikeWyatt 13 May 2010 в 16:19
поделиться

4 ответа

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

static class Role {
    public const string Admin = "Admin";
}
21
ответ дан 28 November 2019 в 06:10
поделиться

Хотя он не использует перечисления, я использовал приведенное ниже решение, где мы подклассифицируем фильтр Authorize, чтобы принимать аргументы имени роли переменной длины в конструкторе. Используя это вместе с именами ролей, объявленными где-то в константных переменных, мы избегаем магических строк:

public class AuthorizeRolesAttribute : AuthorizeAttribute
{
    public AuthorizeRolesAttribute(params string[] roles) : base()
    {
        Roles = string.Join(",", roles);
    }
}

public class MyController : Controller
{
    private const string AdministratorRole = "Administrator";
    private const string AssistantRole = "Assistant";

    [AuthorizeRoles(AdministratorRole, AssistantRole)]
    public ActionResult AdminOrAssistant()
    {                        
        return View();
    }
}

(я написал об этом чуть подробнее - http://tech-journals.com / jonow / 2011/05/19 / избегая-MAGIC-строка-в-Asp-нетто-MVC Авторизованных-фильтров )

10
ответ дан JonoW 28 November 2019 в 06:10
поделиться

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

public static class EnumerationExtension
{
  public static string GetName(this Enum e)
  {
    return Enum.GetName(e.GetType(), e);
  }
}
2
ответ дан 28 November 2019 в 06:10
поделиться

Это не так сложно настроить AuthorizeAttribute так, как вы предлагаете.

Подтипируйте его, добавьте пользовательское свойство для вашего типа перечисления и вызовите ToString() для переданного значения. Поместите это в обычное свойство роли. Это займет всего несколько строк кода, а AuthorizeAttribute все равно сделает всю реальную работу.

+1 для Матти, так как consts также является хорошим выбором.

3
ответ дан 28 November 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: