我想改變用戶的角色,一旦他們自動做一些作業,但正常的db.savechanges()不作業,他們甚至沒有拋出任何錯誤,有人可以解決這個問題嗎?
控制器中用于改變資料庫中用戶角色的代碼是:
[AllowAnonymous] 。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(PRSV_Login loginData。string ReturnUrl = "")?
{
string message = "" ;
using (PRSVEntities db = new PRSVEntities()
{
var dataItem = db.PRSV_Login.Where(x => x.Email == loginData.Email).FirstOrDefault()。
if (dataItem != null)
{
if(string.Compare(Encrypto.Hash(loginData.Password), dataItem.Password) == 0)
{
int timeout = 20;
var ticket = new FormsAuthenticationTicket(loginData.Email, true, timeout);//傳遞一個變數admin
string encrypted = FormsAuthentication.Encrypt(ticket)。
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = DateTime.Now.AddMinutes(timeout);
cookie.HttpOnly = true;
Response.Cookies.Add(cookie)。
if (Url.IsLocalUrl(ReturnUrl))
{
return Redirect(ReturnUrl)。
}
else[/span
{
if (dataItem.Role == "admin")
{
return RedirectToAction("AdminPanel"/span>, "Home"/span>)。
}
if (dataItem.Role == "Voter")
{
var isEmail = IsEmailExist(loginData.Email)。
if (isEmail)
{
loginData.Role = "Voted"。
db.SaveChanges()。
Session["username"] = dataItem.Name。
Session["Email"] = dataItem.Email。
ModelState.AddModelError("EmailExist", "候選人已經投票了!")。
Session["message"] = "<h1 class="display-5 fw-bold sorry">對不起!</h1><br><p class="col-md-8 fs-4">< b> "
dataItem.Name ",</b><br><br>你不能投<b>兩次或更多!</b><br></p>"/span>。
return RedirectToAction("Sorry", "Home") 。
}
else; }
{
Session["username"] = dataItem.Name。
Session["Email"] = dataItem.Email。
TempData["Name"] = dataItem.Name。
TempData["Email"] = dataItem.Email。
return RedirectToAction("VotePanel"/span>, "Home"/span>)。
}
}
else; }
{
if (dataItem.Role == "Voted")
{
Session["用戶名"] = dataItem.Name;
Session["Email"] = dataItem.Email。
ModelState.AddModelError("EmailExist", "候選人已經投票了!")。
Session["message"] = "<h1 class="display-5 fw-bold sorry">對不起!</h1><br><p class="col-md-8 fs-4">< b> "
dataItem.Name ",</b><br><br>你不能投<b>兩次或更多!</b><br></p>"/span>。
return RedirectToAction("Sorry", "Home") 。
}
else; }
{
message = "Invalid credential provided";
return RedirectToAction("Index"/span>, "Home")。
}
}
}
}
else
{
ModelState.AddModelError("", "Invalid Email-Id/Password") 。
return View();
}
}
else; return View(; }
{
ModelState.AddModelError("", "Invalid Email-Id/Password") 。
return View();
}
}
}
我也在使用身份包。 我還為這個角色動作使用了一個單獨的類,其內容如下所示
namespaceDEE_PRSV_V2_3.MyRoleProvider
{
public class SiteRole : RoleProvider
{
public override void AddUsersToRoles(string[] usernames, string[] roleNames)。
{
throw new NotImplementedException();
}
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}
public override bool DeleteRole(span class="hljs-built_in">string roleName, bool throwOnPopulatedRole)?
{
throw new NotImplementedException();
}
public override string[] FindUsersInRole(span class="hljs-built_in">string roleName, string usernameToMatch)。
{
throw new NotImplementedException();
}
public override string[] GetAllRoles()
{
throw new NotImplementedException();
}
public override string[] GetRolesForUser(string Email)
{
PRSVEntities db = new PRSVEntities();
string data = db.PRSV_Login.Where(x => x.Email == Email).FirstOrDefault().Role。
string[] result = { data };
return result;
}
public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}
public override bool IsUserInRole(string username, string roleName)。
{
throw new NotImplementedException();
}
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)。
{
throw new NotImplementedException();
}
public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}
}
uj5u.com熱心網友回復:
你正在改變你的方法引數loginData的值,它并沒有附加到你的背景關系。你應該改變從資料庫中獲取的dataItem的Role。
uj5u.com熱心網友回復:
如果你使用ASP.NET Identity,你可以將UserManager注入你的控制器中。
private readonly UserManager<ApplicationUser> _userManager;
public MyController(UserManager<ApplicationUser> userManager) /span>
{
_userManager = userManager。
}
/Action Method /Action Method ?
public async Task<IActionResult> Login(...)
{
//獲取當前用戶。你也可以使用UserManager的。
// FindByIdAsync 或 FindByEmailAsync 方法。
var user = await _userManager.GetUserAsync(HttpContext.User)。
//將用戶添加到角色中。
var result = await _userManager.AddToRoleAsync(user, "MyRole") 。
if(result.Succeeded)
{
//Handle result。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307735.html
標籤:
