新增一個網際網路應用程式,打開 AccountController並看看註冊action
[HttpPost]
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// 嘗試註冊使用者
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// 如果執行到這裡,發生某項失敗,則重新顯示表單
return View(model);
}
這裡少了對新的使用者指派腳色設定,在 WebSecurity.CreateUserAndAccount() 後面加入
if (!Roles.RoleExists("user"))
{
Roles.CreateRole("user");
}
Roles.AddUserToRole(model.UserName, "user");
之後可以再Action上面加入
[Authorize(Roles = "admin")]
或是在程式或是View裡面判斷
if (Roles.IsUserInRole("admin")){}
---------------------------------------------------------
當在別的Controller裡面的Action加入[Authorize(Roles = "admin")] 會出現錯誤 :
建立連接至 SQL Server 時,發生網路相關或執行個體特定的錯誤。找不到或無法存取伺服器。確認執行個名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 (provider: SQL Network Interfaces, error: 26 - 搜尋指定的伺服器/執行個體時發生錯誤)
因為使用SimpleMembership的資料庫還未初始化,可以在Controller上加入
[InitializeSimpleMembership] 即可(預設只有AccountController有加入該屬性);
或是想要在應用程式啟動時就初始化可以在Global.asax 加入
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
如果指示發生錯誤在:
// 請確定一個應用程式啟動只起始一次 ASP.NET Simple Membership
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
// 請確定一個應用程式啟動只起始一次 ASP.NET Simple Membership
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
頁面顯示錯誤訊息為:
"WebSecurity.InitializeDatabaseConnection" 方法只能呼叫一次。
"WebSecurity.InitializeDatabaseConnection" 方法只能呼叫一次。
將該檔案(Filters/InitializeSimpleMembershipAttribute.cs)內的WebSecurity.InitializeDatabaseConnection()方法移除
---------------------------------------------------------
取的目前使用者的角色(陣列)
string[] roles = Roles.GetRolesForUser()
判斷角色
bool isAdmin = Roles.IsUserInRole("admin")
沒有留言:
張貼留言