まず、サーバー側の承認も実行する必要があります。誰でもクライアントになりすましてコントローラーを直接呼び出すことができ、クライアント側の承認を回避できます。
しかし、これが私がすることです:
このビジネス ロジックを一元的に格納する 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 を使用してコントローラーを呼び出して、必要に応じて質問することもできます (この質問を参照してください) が、それが必要かどうかはわかりません。