2

小さな MVC4 Web サイトを構築しており、SimpleMembershipProvider を SimpleRoleProvider と共に使用しています。

[webpages_Roles] に「管理者」と「ユーザー」が含まれるようにデータベースをシードしました (これに似ています:リンク)。

アカウントとユーザー プロファイル モデルのすべては、MVC4 プロジェクトが作成されたときと同じです。

誰かが登録するたびに自動的に「ユーザー」ロールに配置されるようにするにはどうすればよいですか?

4

1 に答える 1

7

通常、すべてのユーザー登録ロジックはアカウント コントローラーに存在します (これは、インターネット アプリケーション用に提供されたテンプレートの 1 つを使用する場合に当てはまります)。したがって、アカウントが正常に作成されたら、コードを登録メソッドに追加して、ユーザーをユーザー ロールに追加する必要があります。

これは、イベントが存在する場合でも、イベントを監視しようとするよりも簡単で整頓されています。適切に設計されたアプリでは、とにかく、登録コードが 1 か所しかないことに気付くはずです。これにより、Facebook などのソーシャル ネットワーク ログインを使用している場合、OAuth シナリオを処理することもできます。

例: これは、インターネット アプリケーション テンプレート (ローカル サイト登録用) ですぐに使用できる AccountsController で使用する方法です。

[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
    ... various actions ...

    // GET: /Account/Register
    [AllowAnonymous]
    public ActionResult Register() {
        return View();
    }
    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model) {
        if (ModelState.IsValid) {
            // Attempt to register the user
            try {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
// ----------------- NEW LINES HERE
                Roles.AddUserToRoles(model.UserName, new[] { "Users" });
// ----------------- END NEW LINES
                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e) {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

    ... more actions ...
}
于 2013-05-13T09:26:03.710 に答える