3

ユーザーに応じてさまざまなレベルのアクセスを許可する ASP.NET MVC ベースのアプリケーションがあります。現在の動作方法は、ユーザーがページにアクセスすると、データベースに対してチェックが行われ、ユーザーが持っている権限が決定されます。次に、ユーザーのアクセス レベルに基づいてビューが選択されます。一部のユーザーは、他のユーザーよりも多くのデータを表示し、より多くの機能を利用できます。各ページは、ページに表示されるデータを表示および更新するために、さまざまな ajax 呼び出しも行います。

私の質問は、特定の ajax 呼び出しがビューから発信され、ユーザーがアクセスできないデータを返したり更新したりするために手動で作成されていないことを確認する最善の方法は何ですか? ユーザーが最初にページをロードしたときにすでに行われているため、ajax呼び出しが行われるたびにデータベースにアクセスして再チェックする必要はありません。

4

4 に答える 4

2

Authorize Attributeを確認してください。コントローラー全体またはコントローラー内の特定のメソッドだけに配置できます。

例:

[Authorize(Roles = "Administrator")]
public class AdminController : Controller
{
 //your code here
}

また

public class AdminController : Controller
{
    //Available to everyone
    public ActionResult Index()
    {
        return View();
    }

    //Just available to users in the Administrator role.
    [Authorize(Roles = "Administrator")]
    public ActionResult AdminOnlyIndex()
    {
        return View();
    }
}

または、カスタム Authorize 属性を記述して、独自のロジックを提供することもできます。

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{           
    protected override bool AuthorizeCore(HttpContextBase httpContext)     
    {
        IPrincipal user = httpContext.User;     
        var validRoles = Roles.Split(',');//Roles will be a parameter when you use the Attribute        
        List<String> userRoles = GetRolesFromDb(user);//This will be a call to your database to get the roles the user is in.

        return validRoles.Intersect(userRoles).Any();
    }
} 

使用するには:

 [CustomAuthorizeAttribute(Roles = "Admin,Superuser")] 
 public class AdminController : Controller {

 }
于 2012-08-22T22:53:23.833 に答える
0

使用しているセッションメカニズムの種類によって異なります。デフォルトのメンバーシッププロバイダーを使用していますか?そうでない場合は、ユーザーのIDとセッションIDを渡すことができます。ユーザーセッションが有効であり、ユーザーがその呼び出しを行うために必要な権限を持っていることを確認してください。

于 2012-08-22T22:11:49.567 に答える
0

Authorize 属性に加えて、ここに示すように、カスタム属性を使用して Ajax リクエストのみを許可することもできます。

ありがとう

于 2012-08-23T00:11:47.270 に答える