2

関連するものを見つけることができませんでした。

ここまでで、C# を使用して MVC でクールな Web アプリを作成する必要がありました。User モデルを次のように作成しました

public class User
{

    // Must be named EntityNameId, must have primary key!
    public int UserId { get; set; }

    [DisplayName("First Name")]
    public string firstName { get; set; }
    [DisplayName("Last Name")]
    public string lastName { get; set; }
    [DisplayName("Cell Number")]
    public string cellNumber { get; set; }

}

そのため、各ユーザーのプロファイル/ダッシュボードを設計しました

/User/Profile/1

ID によってアクセスされます。また、そのユーザーのすべてのアイテムを表示するアイテム /Item/Index/1 を編集するメニューなど、他のセクションもあります。私のコードは、ユーザーのためだけにそれらのページをフィルタリングして入力するなどの機能を果たします。ただし、この時点まで、認証を実装していません。ApplicationServices を介して組み込みの認証ツールを使用したいと考えており、以前にロールを使用したことがあります。

<Authorize(Roles:="Manager,Administrator")>

ただし、ログインしている特定のユーザーにページを制限したいですか? つまり、 /User/Profile/1 は、そのユーザーが提供するロールではなく、そのユーザーなどのみがアクセスできるようにする必要があります。

これを行う方法を知っている人はいますか?これは、アカウント コントローラーとユーザー コントローラーを結び付けることを意味する可能性が高いことはわかっていますが、すべてが同じように機能するようにする方法がよくわかりません。アプリは基本的に完成しているので、非常に単純ですが、認証が必要です。

4

2 に答える 2

2

アクション メソッドの上部で簡単なチェックを行うだけです。現在のユーザーでない場合は、リダイレクトを実行します。

public ActionResult Profile(int id)
{
    if (CurrentUser.Id != id)
    {
        return RedirectToAction("Index");
    }

    return View();
}

頻繁に使用する場合は、メソッドにリファクタリングできます。

于 2013-03-29T16:40:20.150 に答える
1

2番目のオプションは、ユーザーIDをコントローラー/アクションメソッドに渡すことさえせず、ログインしているユーザーのIDを取得してそこから情報を取得することです。

[Authorize]
public ActionResult Profile()
{
    return View(profileService.GetUserProfile(CurrentUser.Id));
}
于 2013-03-29T16:43:22.260 に答える