Я новый пользователь MVC 3, и я пытаюсь создать админ через базу данных SQL. Прежде всего, у меня есть объект Customer и администратор, который можно определить через поле admin, которое является логическим типом в объекте Customer. Я хочу сделать доступ к админе только на странице продукта, а не в обычном клиенте. И я хочу сделать [Авторизовать (Roles = "admin")] вместо [Авторизовать]. Однако я не знаю, как я могу сделать роль администратора в моем коде. Тогда в моем HomeController я написал этот код.MVC 3 Авторизовать собственные роли
public class HomeController : Controller
{
[HttpPost]
public ActionResult Index(Customer model)
{
if (ModelState.IsValid)
{
//define user whether admin or customer
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["rentalDB"].ToString());
String find_admin_query = "SELECT admin FROM Customer WHERE userName = '" + model.userName + "' AND admin ='true'";
SqlCommand cmd = new SqlCommand(find_admin_query, conn);
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
//it defines admin which is true or false
model.admin = sdr.HasRows;
conn.Close();
//if admin is logged in
if (model.admin == true) {
Roles.IsUserInRole(model.userName, "admin"); //Is it right?
if (DAL.UserIsVaild(model.userName, model.password))
{
FormsAuthentication.SetAuthCookie(model.userName, true);
return RedirectToAction("Index", "Product");
}
}
//if customer is logged in
if (model.admin == false) {
if (DAL.UserIsVaild(model.userName, model.password))
{
FormsAuthentication.SetAuthCookie(model.userName, true);
return RedirectToAction("Index", "Home");
}
}
ModelState.AddModelError("", "The user name or password is incorrect.");
}
// If we got this far, something failed, redisplay form
return View(model);
}
И класс DAL является
public class DAL
{
static SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["rentalDB"].ToString());
public static bool UserIsVaild(string userName, string password)
{
bool authenticated = false;
string customer_query = string.Format("SELECT * FROM [Customer] WHERE userName = '{0}' AND password = '{1}'", userName, password);
SqlCommand cmd = new SqlCommand(customer_query, conn);
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
authenticated = sdr.HasRows;
conn.Close();
return (authenticated);
}
}
Наконец, я хочу сделать нестандартную [Авторизовать (Roles = "Admin")]
[Authorize(Roles="admin")]
public class ProductController : Controller
{
public ViewResult Index()
{
var product = db.Product.Include(a => a.Category);
return View(product.ToList());
}
}
Это мой исходный код в настоящее время. Должен ли я использовать класс AuthorizeAttribute? Если мне нужно сделать, как я могу это сделать? Не могли бы вы мне объяснить? Я не могу понять, как установить особую роль в моем случае. Пожалуйста, помогите мне, как я могу это сделать. Благодарю.
Ваш код легко открыт для SQL-инъекции: String find_admin_query = "SELECT admin FROM Customer WHERE userName = '" + model.userName + "' AND admin = 'true'"; Что делать, если имя пользователя: '; удалить из пользователей; - –