move.UserId が currentUserId と等しくない場合は例外を構築しようとし、アクションにリダイレクトするか、move.UserId が currentUserId と等しい場合はビューを返します。
ここのコードを参照してください:
public ActionResult Details(int id)
{
MembershipUser currentUser = Membership.GetUser();
Guid currentUserId = (Guid)currentUser.ProviderUserKey;
Move move = db.Moves.Where(m => m.UserId == currentUserId)
.FirstOrDefault();
if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved)
{
if (move.UserId == currentUserId)
{
return View(move);
}
}
return RedirectToAction("Oops", new RouteValueDictionary(
new { controller = "Account", action = "Oops", area = "", id = UrlParameter.Optional }));
}
Move/(int) を戻す URL に結び付けて、ユーザーがこれを move.UserId != currentUserId の移動を返す (int) に変更すると、リダイレクトも行います。現在、URL を変更して他の人の動きを取得できます。
マイコントローラー
public ViewResult Index()
{
if (User.Identity.IsAuthenticated)
{
MembershipUser currentUser = Membership.GetUser();
Guid currentUserId = (Guid)currentUser.ProviderUserKey;
if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved)
{
var results = db.Moves.Where(move => move.UserId == currentUserId)
.ToList();
return View(results);
}
}
return View(db.Moves.ToList());
}
[ClientValidation]
public ActionResult Details(Move move)
{
return View(move);
}
私の見解
@model MovinMyStuff.Domain.Entities.Move
@{
ViewBag.Title = "Details";
}
<div>
@Html.DisplayFor(model => model.StartCity),
@Html.DisplayFor(model => model.StartState)
@Html.DisplayFor(model => model.StartZip) -
@Html.DisplayFor(model => model.EndCity),
@Html.DisplayFor(model => model.EndState)
@Html.DisplayFor(model => model.EndZip)
</div>
<fieldset>
<div class="job-details">
@Html.HiddenFor(model => model.MoveId)
@Html.HiddenFor(model => model.UserId)
<ul class="distance">
<li>
<div>
Distance</div>
</li>
<li>1,978.6 Miles</li>
</ul>
<ul class="address-wrapper">
<li>
<ul class="address from">
<li>
<div>
From</div>
</li>
<li><span>Address: </span>
@Html.DisplayFor(model => model.StartStreetNumber)
@Html.DisplayFor(model => model.StartStreetName)
</li>
...
</fieldset>