2011-08-03 34 views
2

私はデフォルトのテンプレートを使わずにビルドしたプロジェクトを持っています。ActionFilterでセッションが存在するか確認してください

今、私は管理者のためのチェックを実装する必要があると私は

public ActionResult someAction() 
{ 
    if (session exists) 
    { 
     // do it 
    } 
    else 
    { 
     //redirect back or show 403 
    } 
} 

は、すべての削除/編集/作成アクションの良い考えであるとは思いません。

私が代わりにやりたいのは、管理セッションが存在するかどうかを確認するビルドアクションフィルタです。セッションがない場合は、403などにリダイレクトされます。

[AdminCheck] 
public ActionResult someAction() 
{ 
    // do it 
} 

しかし、私はそれを行う方法がわかりません。私はいくつかの研究を行い、それを書いていますが、その中に機能を実装する方法はわかりません。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace stevePortfolio.Infrastructure 
{ 
    public class AdminCheck : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      base.OnActionExecuting(filterContext); 
      // No idea what to write here... 
     } 
    } 
} 

答えて

1

これにはAuthorizeAttributeを使用してください。

[Authorize(Roles = "IsAdmin")] 
public ActionResult DoStuff() 
{ 
    //action body 
} 

またはあなたが必要なコードでより多くの複雑さと場所が必要な場合は、それをサブクラス化することができます:あなたは、ユーザーがこのような特定のロールのメンバーであるかどうかを確認するために箱から出して、それを使用することができます。

public class AuthorizeByRightAttribute : AuthorizeAttribute 
    { 
     protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) 
     { 
      var authorized = base.AuthorizeCore(httpContext); 
      if (authorized && controller != null) 
      { 
       //Return true or false based on some criteria 
      } 

     } 

あなたは任意の方法で不正なリクエストを処理できます。以下の例では、HTTPステータスコード403とjsonresultを使用してajaxメソッドをチェックし、通常のhttpリクエストでは「Not Authorized」ページにリダイレクトします。 ASP.NET MVCでAuthorize attibuteは何のためにあるのかだ

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
     { 
      if (!controller.PortalSession.ValidSession) 
      { 
       base.HandleUnauthorizedRequest(filterContext); 
      } 
      else 
      { 
       if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest()) 
       { 
        //base.HandleUnauthorizedRequest(filterContext); 
        filterContext.RequestContext.HttpContext.Response.StatusCode = 403; 
        var result = new JsonResult(); 
        result.Data = new {Success=false}; 
        result.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
        filterContext.Result = result; 
        return; 
       } 

       filterContext.Result = new RedirectToRouteResult(
        new RouteValueDictionary 
         { 
          {"controller", MVC.Login.Name}, 
          {"action", MVC.Login.ActionNames.NotAuthorized}, 
          {"group", RequiredRole} 
         }); 
      } 


     } 
+0

をしかし、どのように私は私がログインしていると私は管理者よ、サーバに伝えることができます:http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.aspx

また、ユーザーを確認することができますか? – sed

+0

Okey私はいくつかの情報を見つけ、それを動作させました。ありがとう。 – sed

1

:それは何

[Authorize(Roles = "adminRole")] 
public ActionResult someAction() 
{ 
    // do it 
} 

は基本的にHttpContext.Current.User.IsInRole("Admin")への呼び出しです。あなたがRoleProviderを必要とする役割を設定するには

[Authorize(Users = "Admin1,Admin2")] 
public ActionResult someAction() 
{ 
    // do it 
} 
+0

しかし、ログイン時にどのように管理者に役割を設定できますか? – sed

+0

これは、RoleProviderの機能です。http://odetocode.com/Articles/428.aspx – Peter

関連する問題