2016-07-17 13 views
0

Ich habe meine eigene benutzerdefinierte Role-Tabelle in meiner Datenbank erstellt, und ich wollte auch ein benutzerdefiniertes authorize-Attribut erstellen.MVC benutzerdefiniertes Attribut aus der Datenbank

Hier ist, was ich bisher habe, aber ich bin nicht wirklich sicher, wie es weitergeht:

private List<RoleModel> Roles; 
    private IRoleRepository repo; 
    private ICustomerRepository cust; 


    public bool CheckRoles(string UserId) 
    { 
     try 
     { 
      Roles = repo.GetAll().ToList(); 
      CustomerModel Customer = cust.Get(UserId); 
      int CustomerRole = Customer.RoleId; 
      RoleModel role = Roles.First(x => x.id == CustomerRole); 


     } 
     catch(Exception e) 
     { 
      return false; 
     } 
    } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 
     string UserId = filterContext.HttpContext.User.Identity.GetUserId(); 



    } 

Wenn jemand kann mir dabei helfen beende ich es sehr zu schätzen würde.

Danke!

+1

, die Sie stecken sind Teil können Sie das näher erläutern? –

Antwort

0

Ich denke, dass ein benutzerdefiniertes AuthorizeAttribute erstellen keine gute Idee ist. Es empfiehlt sich, das StandardautorizeAttribute zu verwenden.

Es ist ein häufiger Fall, eine eigene Role-Tabelle zu haben. Es ist besser zu überschreiben, wie die Rollen der Identität Ihres Principals festgelegt werden, und die Roles-Eigenschaft von AuthorizeAttribute zu verwenden. Legen Sie die Rolle einmal als Anspruch fest, wenn der Benutzer sich anmeldet. Es ist besser, die Rolle aus der Datenbank im benutzerdefinierten Autorisierungsattribut bei jeder Anforderung abzurufen. Stellen Sie Ihren Anspruch CalimTypes.Role, und dann schützen Sie Ihre Controller/Aktionen mit:

[Authorize(Roles = "admin")] 
+0

Der Grund, warum ich meine eigene Rollentabelle erstellt habe, ist, dass Sie eine Rolle kaufen müssen, so dass jede Rolle eine Preisspalte enthält und die Standardrolle dies nicht hat. Denkst du aber, es wäre eine gute Übung, meinem Rollentableau einen Fremdschlüssel von ASPRoleId zu geben und damit zu verlinken? – DevShadow

Verwandte Themen