2

.NET MVC アプリケーション内の機能へのアクセスをラップするためのいくつかの異なるソリューションは何ですか?

たとえば、アプリケーションのさまざまな領域を表す 6 つのタブがあり、領域 1 には、追加、編集、アップロードなどの機能があります。

私は言うための中心的な方法が必要です:

  1. ユーザーができることの辞書を作成する
  2. タブ、ボタン、リンクなどをラップし、ユーザーがこの機能にアクセスできることを検証し、適切に表示/非表示にします。

アクション フィルターとロールを使用してアクションへのアクセスを制限できることはわかっていますが、UI からはどうすればよいでしょうか?

どんな助けでも大歓迎です。これを行う必要があったのは私だけではないと確信しています、ありがとう!

4

1 に答える 1

2

まず、サーバー側の承認も実行する必要があります。誰でもクライアントになりすましてコントローラーを直接呼び出すことができ、クライアント側の承認を回避できます。

しかし、これが私がすることです:

このビジネス ロジックを一元的に格納する AuthorizationService を作成します。次のようなメソッドがあります。

public bool CanEditSomeObject(Guid userId, Guid objectId)

コントローラー (またはコントローラーによって参照される別のサービス) 内でこの AuthorizationService を使用して、ビューが必要とするすべての承認情報を含む ViewModel を構築します。

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Edit(Guid id)
    {
        bool currentUser = _userService.GetUser(User.Identity.Name);
        bool canEditSomeObject = _authenticationService.CanEditSomeObject(currentUser.Id, id);
        var viewModel = new SomeObjectViewModel {CanEditSomeObject = canEditSomeObject};
        return View(viewModel);
    }

ビューを強く型付けし、モデルに基づいて HTML を変更します。部分ビューなどを使用して、これをよりクリーンにすることができます。ただし、現在のユーザーがアクセスできないものについては、HTML を非表示にするか、無効にするか、含めないだけです。

<%= if (Model.UserCanEdit) Html.RenderPartial("EditForm.ascx") %>

さらに、クライアント側で物事を動的に変更する必要がある場合 (たとえば、ユーザーがアクション a を実行したため、アクション b を実行できるようになった場合)、JQuery を使用して HTML を操作できます。JQuery を使用してコントローラーを呼び出して、必要に応じて質問することもできます (この質問を参照してください) が、それが必要かどうかはわかりません。

于 2010-03-13T06:49:44.807 に答える