2014-12-09 2 views
0

У меня есть контроллер, к которому можно получить доступ у пользователя, имеющего привилегии администратора или медсестру. Затем по отдельному действию я могу сделать более строгим, если захочу. Прямо сейчас у меня есть что-то вроде этогоНесколько пользовательских ролей в Authorize

[AuthorizeUser(UserRole = "Admin", OrganizationType = "Institution")] 

Это прекрасно работает. Но я бы что-то вроде

[AuthorizeUser(UserRole = "Admin,Nurse", OrganizationType = "Institution")] 

AuthorizeUser на заказ разрешение

public class AuthorizeUser : AuthorizeAttribute 
{ 
    public string UserRole { get; set; } 
    public string OrganizationType { get; set; } 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (!isAuthorized) 
     { 
      return false; 
     } 

     return CheckOrganizationType 
      .checkRole(this.UserRole, this.OrganizationType, Auth.CurrentUser); 
    } 
} 

    public static bool checkRole(String role, String organizationType, User user) 
    { 
     RolesType rt = null; 
     OrganizationType ot = null; 
     foreach (UserRoles ur in user.GetUserRoles()) 
     { 
      rt = RolesType.Get(ur.organizationTypeId,ur.roleTypeId); 
      ot = OrganizationType.Get(ur.organizationTypeId, "1"); 
     } 

     if (rt != null && rt.Name == role && ot != null && ot.Name == organizationType) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

, а затем проверить, если текущий пользователь имеет какой-либо из определенных ролей. Как это может быть сделано? Есть идеи?

+0

Что приписывать это 'AuthorizeUser'? это не родной – Luizgrs

+0

@Luizgrs только что обновил мой вопрос. – mohsinali1317

+0

Мы не можем вам помочь, если вы не включили CheckOrganizationType.checkRole (реализация – InferOn

ответ

1

Вы только изменить это заявление:

if (rt != null && rt.Name == role && ot != null && ot.Name == organizationType) 

с этим:

if (rt != null && role.Contains(rt.Name) && ot != null && ot.Name == organizationType)