asp.net mvc украшает [Авторизовывают ()] с несколькими перечислениями

Вкус Вашей команды или инструкции по кодированию Вашего проекта.

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

32
задан codette 18 July 2009 в 19:05
поделиться

2 ответа

Попробуйте использовать битовый оператор ИЛИ следующим образом:

[Authorize(Roles= MyEnum.Admin | MyEnum.Moderator)]
public ActionResult myAction()
{
}

Если это не сработает, вы можете просто использовать свой собственный. В настоящее время я только что сделал это в своем проекте. Вот что я сделал:

public class AuthWhereRole : AuthorizeAttribute
{
    /// <summary>
    /// Add the allowed roles to this property.
    /// </summary>
    public UserRole Is;

    /// <summary>
    /// Checks to see if the user is authenticated and has the
    /// correct role to access a particular view.
    /// </summary>
    /// <param name="httpContext"></param>
    /// <returns></returns>
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null)
            throw new ArgumentNullException("httpContext");

        // Make sure the user is authenticated.
        if (!httpContext.User.Identity.IsAuthenticated)
            return false;

        UserRole role = someUser.Role; // Load the user's role here

        // Perform a bitwise operation to see if the user's role
        // is in the passed in role values.
        if (Is != 0 && ((Is & role) != role))
            return false;

        return true;
    }
}

// Example Use
[AuthWhereRole(Is=MyEnum.Admin|MyEnum.Newbie)]
public ActionResult Test() {}

Также не забудьте добавить атрибут flags в ваше перечисление и убедиться, что все они имеют значение от 1 и выше. Примерно так:

[Flags]
public enum Roles
{
    Admin = 1,
    Moderator = 1 << 1,
    Newbie = 1 << 2
    etc...
}

Левый сдвиг бит дает значения 1, 2, 4, 8, 16 и т. Д.

Что ж, надеюсь, это немного поможет.

31
ответ дан 27 November 2019 в 20:17
поделиться

Или вы можете объединить как:

[Авторизовать (Roles = Common.Lookup.Item.SecurityRole.Administrator + "," + Common.Lookup.Item.SecurityRole.Intake)]

-1
ответ дан 27 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

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