Вкус Вашей команды или инструкции по кодированию Вашего проекта.
, Если Вы находитесь в многоязычной среде, Вы могли бы хотеть поощрить использование того же типа кавычек для строк, которые другой язык использует, например. Еще, я лично как лучше всего вид'
Попробуйте использовать битовый оператор ИЛИ следующим образом:
[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 и т. Д.
Что ж, надеюсь, это немного поможет.
Или вы можете объединить как:
[Авторизовать (Roles = Common.Lookup.Item.SecurityRole.Administrator + "," + Common.Lookup.Item.SecurityRole.Intake)]