ورود

View Full Version : مبتدی: تعریف کاربری



آنتریوم
شنبه 08 تیر 1392, 12:11 عصر
سلام من برای اپلیکیشنم دو تا Role تعریف کردم حالا می خوام موقع register همون جا تو فرمم نوع کاربری بهش اختصاص بدم تو حالت معمولی وقتی یه کاربر جدید register می کنم standard تعریف میشه ولی من میخوام بتونم همونجا admin هم اضافه کنم. راهنماییم کنید مرسییییییی :لبخندساده:

alireza.tabesh
شنبه 08 تیر 1392, 13:11 عصر
دوست عزیز مشخصاً نمی تونید به کاربر اجازه بدید که نقش خودشو وقت رجیستر کردن انتخاب کنه. اگر بخواد ادمین باشه یعنی به کل سایت دسترسی داره . ولی میتونید از www.asp.net/mvc نمونه های خوبی برای تعریف کاربری پیدا کنید

alireza.tabesh
شنبه 08 تیر 1392, 13:16 عصر
البته از این طریق هدف شما اجرایی میشه :

Roles.AddUserToRoles


رول های رو بصورت یک dopdown فراخوانی کنید و با دستور بالا به رول مورد نظر کاربرتون اضافه میشه

آنتریوم
شنبه 08 تیر 1392, 13:44 عصر
البته از این طریق هدف شما اجرایی میشه :

Roles.AddUserToRoles


رول های رو بصورت یک dopdown فراخوانی کنید و با دستور بالا به رول مورد نظر کاربرتون اضافه میشه


نمی خواستم که یوزر خودش role اش رو تعیین کنه ادمین باید رجیسترش کنه

public

ActionResult Register()

{

ViewData[
"roleName"] = new SelectList(Roles.GetAllRoles(), "roleName");


return View();

}


//


// POST: /Account/Register

[
HttpPost]


public ActionResult Register(RegisterModel model)

{


if (ModelState.IsValid)

{


// Attempt to register the user


MembershipCreateStatus createStatus;


Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);


if (createStatus == MembershipCreateStatus.Success)

{


Roles.AddUserToRole(model.UserName, "RoleName");


FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);


return RedirectToAction("Index", "Home");

}


else

{

ModelState.AddModelError(
"", ErrorCodeToString(createStatus));

}

}


// If we got this far, something failed, redisplay form


return View(model);

}


میشه این ولی چرا این error رو میده؟
The role 'RoleName' was not found.

alireza.tabesh
شنبه 08 تیر 1392, 13:57 عصر
role رو Enable کردی ؟
یک مورد دیگه اینکه dropdown رو بصورت ViewBag تعریف کن که RoleId شناسائی بشه. به نظر من بخاطر عدم تعریف شدن RoleId این Error میاد

آنتریوم
شنبه 08 تیر 1392, 14:20 عصر
این ویوشه:


<labelfor="roleName">Select Role:</label>

@Html.DropDownList(
"roleName")

@Html.ValidationMessage(
"roleName")


این کنترلرش :



publicActionResult Register()

{

ViewBag.roleName =
newSelectList(Roles.GetAllRoles(), "roleName");


return View();

}


//


// POST: /Account/Register

[
HttpPost]


publicActionResult Register(RegisterModel model,string roleName)

{


if (ModelState.IsValid)

{


// Attempt to register the user


MembershipCreateStatus createStatus;


Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);


if (createStatus == MembershipCreateStatus.Success)

{


Roles.AddUserToRole(model.UserName, roleName);


FormsAuthentication.SetAuthCookie(model.UserName, false/* createPersistentCookie */);


return RedirectToAction("Index", "Home");

}


else

{

ModelState.AddModelError(
"", ErrorCodeToString(createStatus));

}

}


// If we got this far, something failed, redisplay form


return View(model);

}

این اررورش :(
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'roleName'.

Saeed_m_Farid
شنبه 08 تیر 1392, 15:11 عصر
سلام
فکر کنم تو DropDownList تون اگه roleName رو بکنید Role درست بشه، ولی چند تا نکته:

1) مستقیماً نام Role رو به کاربر نباید بدین؛ Admin یا هرکس دیگه، هیچکس نباید جزئیات پیاده سازی رو ببینه. من یه دیکشنری برای این کار استفاده میکنم.
2) از Captcha تو فرمهای عمومی (که POST دارند) استفاده کنید. (مثلاً اینجا (http://www.dotnettips.info/post/981/captchafa))
3) از T4MVC (http://www.dotnettips.info/post/905/t4mvc-%DB%8C%DA%A9%DB%8C-%D8%A7%D8%B2-%D8%A7%D9%84%D8%B2%D8%A7%D9%85%D8%A7%D8%AA-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%BE%D8%B1%D9%88%DA%98%D9%87%E2%80%8C%D9%87%D8%A 7%DB%8C-asp-net-mvc) برای کدهاتون استفاده کنید.
n) کدها رو درست بذارین، بشه خوندشون :لبخند:
=======
* ایجاد دیکشنری برای Role ها :

private Dictionary<string, string> GetAccountRoles(bool isAdmin = false)
{
var roles = new Dictionary<string, string>();
foreach (string role in Roles.GetAllRoles())
{
switch (role)
{
case "admin":
roles.Add(role, "مدیر کل سایت");
break;
case "editor":
roles.Add(role, "ویرایشگر مطالب");
break;
case "club-member":
roles.Add(role, "عضو باشگاه");
break;
case "type1":
roles.Add(role, "نوع فلان");
break;
case "type2":
roles.Add(role, "نوع بهمان");
break;
case "type-n":
roles.Add(role, "نوع آحر!");
break;
}
}
return roles;
}


* متد Get برای اکشن Register

public virtual ActionResult Register(string returnUrl = "")
{
ViewBag.ReturnUrl = returnUrl;
ViewBag.Roles = GetAccountRoles(User.IsInRole("admin"));
return View();
}


* متد Post برای اکشن Register
[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult Register(RegisterModel model, string returnUrl = "")
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity
.CreateUserAndAccount(
model.UserName,
model.Password);

if (!string.IsNullOrEmpty(model.Role))
Roles.AddUserToRole(model.UserName, model.Role);
else
Roles.AddUserToRole(model.UserName, "user");

if (!User.Identity.IsAuthenticated)
WebSecurity.Login(model.UserName, model.Password);

return (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
? RedirectToLocal(returnUrl)
: RedirectToAction(MVC.Home.Index());
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}

// If we got this far, something failed, redisplay form
ViewBag.Roles = GetAccountRoles();
return View(model);
}


* View
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()

<fieldset>
<legend>Register</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
</li>
@if (User.IsInRole("admin"))
{
<li>
@Html.LabelFor(model => model.Role)
@Html.DropDownList(
"Role",
new SelectList(
ViewBag.Roles as System.Collections.IEnumerable,
"Key",
"Value"),
GlobalResources.Global_Dropdown_Empty_Display)
</li>
}
</ol>
<input type="submit" value="ایجاد کاربر" />
</fieldset>
}