0

asp.net mvc3でサイトを構築しているときに問題が発生しました。このサイトでは、許可さ れていないユーザーがそのコントローラーにアクセスしたくないため
、いくつかのコントローラーをすべて許可しています。 次のように、コントローラーと2つのメソッドがあるとします。

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

namespace Com.health.Controllers
{
    [Authorize]
    public class MyfirstController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }        
        public ActionResult seeyourDetails(int id)
        {
            return View();
        } 
    }
}

ここで、このメソッドseeyourDetailsがすべてのユーザーにアカウント情報を通知するとしますが、問題は、ユーザーがその時点でこのメソッドにアクセスすると、URLが http://www.exampple.com/Myfirst/seeyourDetails/1010現在のユーザーIDであり、詳細を表示することです。ある人が私のサイトにログインすると、彼はこのURLにアクセスし、URLに手動で追加する10か、他の番号を追加すると、私のコントローラーはそのユーザーに関するすべての詳細を表示します。

注:これは1か所または2か所で実行できますが、1か所に実装するソリューションが必要であり、アプリケーション全体に影響します。ありがとう

4

4 に答える 4

2

まず、Authorize非常に強力で粒状です。クラス レベルとメソッド レベルで使用できます。どのロールがアクセスできるかを設定することもできます。

[Authorize]
public class MyFirstController : Controller

あなたは基本的に、認証されたすべてのユーザーを言っていますが、使用することもできます

[Authorize(Roles="Administrator")]
public class MyFirstController : Controller

より細かい制御を提供します。ここでは、管理者ロールのユーザーのみがこれらのコンテンツにアクセスできると言っています。アクションについては、SeeYourDetails実際にはユーザー ID を送信するべきではありません。ユーザーが現在ログインしている場合、次のように詳細にアクセスできます。

var current = Membership.GetUser();

したがって、すべてのコードは次のようになります。

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


namespace TestArea.Controllers
{
    [Authorize]
    public class MyFirstController : Controller
    {

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult SeeYourDetails() 
        {
            //get the currently logged in user
            var current = Membership.GetUser();
            //you can always do something else here
            return View(current);
        }


    }

Authorize属性の詳細http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

最後だが大事なことは。C# でプログラミングする場合は、その表記を尊重する必要があります :-) これが役に立てば幸いです

于 2012-04-20T09:17:41.023 に答える
0

あなたが言おうとしているのはデータ認証です。ユーザーはサイトにログインした後、自分の詳細しか見ることができません。

ログインしたユーザーのIDがクエリ文字列で渡されたIDと同じであるかどうかを確認し、@ MikeSWが指定したカスタムの承認フィルターを作成できます。そのためには、ユーザーIDをセッションに保存する必要があります。

これはフィルターであるため、アクションレベル、コントローラーレベル、またはグローバルレベルでも適用できます。

于 2012-04-20T09:41:46.553 に答える
0

クエリ文字列パラメーターからユーザー ID を取得する必要はありません。認証されたユーザー情報のセッションに設定する必要があります。認証されたユーザーを知る必要がある場合は、セッションから取得します

于 2012-04-20T06:15:30.770 に答える