6

MVC3/4を使用しています。しかし、これは承認に関する一般的な質問にすぎません。

私が持っている役割の 1 つは、データベースで "Trip Leader" という名前で、スペースが含まれています。

試し[Authorize(Roles="'Trip Leader', Administrator")]てみましたが、うまくいきませんでした。誰でも助けることができますか?

4

3 に答える 3

3

独自の属性を作成し、AuthorizeAttribute から派生させます。次に、AuthorizeCore メソッドをオーバーライドし、スペースを含むロールの検証を使用して独自のロジックを実装します。

例は次のようになります。

    public class CustomAuthAttribute : AuthorizeAttribute
    {
       private readonly IUserRoleService _userRoleService;
       private string[] _allowedRoles;
    
       public CustomAuthAttribute(params string[] roles)
       {
          _userRoleService = new UserRoleService();
          _allowedRoles = roles;
       }
       protected override bool AuthorizeCore(HttpContextBase httpContext)
       {
        //something like this.
        var userName = httpContext.User.Identity.Name;
        var userRoles = _userRoleService .GetUserRoles(userName); // return list of strings
        return _allowedRoles.Any(x => userRoles.Contains(x));
       }
   }

使用法

[CustomAuth("role withspace","admin")]
public ActionResult Index()
{
}
于 2012-10-25T07:05:05.250 に答える
0

これを試して:

[Authorize(Roles="Trip Leader")]
[Authorize(Roles="Administrator")]

編集:上記のコードでは、ユーザーが両方の役割を果たす必要があります。いずれかまたは両方の認証を探している場合は、次のことを試してください。

[Authorize(Roles="Trip Leader, Administrator")]
于 2012-06-08T20:30:02.903 に答える