2012-04-03 5 views
0

ちょっと考えましたが問題はできません。MVC [Autorize]プラス文字列のロール

MVCでは、[Authorize]を使用していくつかのアクション/コントローラを「保護」することができます。私たちは次のステップを踏んで、ロールとユーザーを守ることができます。

[Authorize(Roles="Boss", User="Secretary"] 

実用的ではないが、この種の悪いものは、誰がこの権利を持つのかわかりません。だからアイデアは、ロールとユーザーのストリングを作成し、これをMicrosoftの魔法にする権限を与えることになりました。

[Authoize(Role=RoleString(), User=UserString())] 

もちろん、動作しません。どのように動作させるのですか?

+0

MVCのASP.Netの解釈について話している場合は、適切なタグを入力してください。 –

答えて

0

AuthorizeAttributeには、User文字とRole文字列の両方の定数が必要です。 this blog postにあるようなCustomAuthorizeAttributeを作成する必要があります。

<add key="authorizedUsers" value="Dave,Chuck,Sally" /> 

、その後、カスタムはこのようなものになるだろう属性認可があります:

だから、あなたがこのようなもので、あなたのweb.configファイルに格納する文字列を持って言うことができます

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    public IAuthorizationService _authorizationService { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var user = httpContext.User; 
     if (!user.Identity.IsAuthenticated) 
     { 
      return false; 
     } 

     var users = System.Configuration.ConfigurationManager.AppSettings["authorizedUsers"].Split(','); 
     if users.Contains(user.Identity.Name) 
     { 
      return true; 
     } 

     return _authorizationService.Authorize(httpContext); 
    } 
} 

私はこれをかなり速く一緒に投げたので、テストされていないことに注意してください。これを簡単に変更して、データベースからユーザー名またはグループ名を取得し、完全に動的にすることができます。