Прежде всего, вы также захотите выполнить авторизацию на стороне сервера. Любой может выдать себя за вашего клиента и напрямую позвонить вашим контролерам, обходя авторизацию на стороне клиента.
Но вот что я сделаю:
Создайте 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 для вызова контроллера, чтобы задать ему вопросы, если хотите (см. Этот вопрос ), но я не уверен, что это необходимо.