View Full Version : Role در MVC
alireza_rashvand
چهارشنبه 01 بهمن 1393, 18:23 عصر
با سلام
در تاپیکی با کمک دوستان با Identity 2.0 (http://barnamenevis.org/showthread.php?471502-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-2-0) اشنا شدم و حتما ان تاپیک به کار دیگر دوستان نیز خواهد امد...
حالا سوالی که برام پیش اومده اینکه در Identity مشخص کردن Role به چه صورتیه؟
شاید مرحله قبلتر باید پرسید ثبت Role ها چطور انجام می شه که بعد از ان این Role به کاربر مورد نظر داده بشه...
مدنظرم یک سایت خبری است که چند Role داره
1- مدیر ارشد
2- مدیر میانی
3- کاربران
امیدوارم این تاپیک هم مثل تاپیک قبل موضوع رو خیلی خوب برای یک مبتدی شرح بده...
سپاس...
sunn789
چهارشنبه 01 بهمن 1393, 23:52 عصر
سلام،
خوب دوست عزیز زمانی شما پروژه رو برای اولین بار اجرا میکنید و یک اطلاعاتی به بانکمیفرستید و یا واکشی میکنید بانک شما ساخته میشه
یه جدول برای نقشها ساخته میشه و یک جدول بریا کاربران و یه جدول برای اعمال هر نقش به کاربر
خوب اگر از مثال استفاده کنید ابتدا برای شما یه نقش admin میسازه و اگر هم نه شما فقط کافیه یه کاربر ثبت نام کنید و مراحل استفاده از بانک اطلااتی و جدول نقشها رو داشته باشید ،
مطلب مهم اینکه هر نقش دسترسی های خودش رو میتونه داشته باشه ، و میتونید برای هر کلاس و یا کل کنترل یه نقشو یا چند نفش تعیین کنید .
زمانی شما به عنوان مدیر ثبت نام کنید میتوانید کاربران دیگر رو بسازید و اگر فرم تعریف نقش رو هم داشته باشید برای هر کاربر نقشش رو بهش اعمال کنید
توصیه من اینه که از مثال خودش استفاده کنید
alireza_rashvand
پنج شنبه 02 بهمن 1393, 18:24 عصر
سپاس.
من از آپدیت اخر 2013 VB استفاده می کنم و دیگه نیاز به نصب مثال نیست... در پروژه ابتدایی لاگین و موارد مورد نیاز Identity 2.0 خودش نصبه ولی برخلاف مثال دیگه همه جزئیات رو اضافه نکرده
فکر کنم بهتره همان طور که شما گفتید یک پروژه بسازم و دستور نصب مثال رو اجرا کنم و مواردی که خودش به عنوان مثال اورده نگاه کنم یادبگیرم
sunn789
پنج شنبه 02 بهمن 1393, 20:27 عصر
درست که شما اخرین ورژن رو دارید و توی پروژه تون Identity2 هست اما نصب مثال کنترلها و ویدو ها رو نصب میکنه، اگر هم خود شما میخواهید میتوانید کدها رو بنویسید.
mohammadreza.najafipour
جمعه 03 بهمن 1393, 20:56 عصر
سلام :لبخندساده:
بدون هیچ مقدمه ای اگه بخوایم بگیم، تو پوشه App_Start یه فایلی(کلاس) هست به نام IdentityConfig. اون رو که باز کنیم تابعی داره به اسم InitializeIdentityForEF که اون رو توی تابع Seed داره فراخوانی می کنه. این تابع به صورت پیش فرض وظیفه ی ثبت کاربر admin@example.com و نقش Admin رو داره. در صورتی که این کاربر و این نقش وجود نداشته باشه اون ها رو در جداول مربوطه ثبت می کنه.
نکته اول این هستش که اگه بخوایم تعداد نقش های بیشتری رو ثبت کنیم، باید این تابع رو کمی دستکاری کنیم :متفکر:
برای مثال(راه های بهتری هم هست صد در صد، فقط برای الگو گرفتن :چشمک:):
string[] roles = { "Admin", "Uesrs", "VIP" };
این آرایه، Role های مورد نظر ما رو شامل میشه.
خطوط زیر رو باید به نحوی تغییر بدیم که به جای یک Role، آرایه Role های ما رو چک و اضافه کنه (مثلا با foreach)
//Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null) {
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
خطوط بعدی مربوط به ثبت کاربرمون به جدول کاربرها هستش:
var user = userManager.FindByName(name);
if (user == null) {
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
این خطوط که مربوط به آخر تابع میشه برای ثبت Role مربوط به کاربر/ کاربرهای ثبت شده در خطوط قبل هستش:
// Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name)) {
var result = userManager.AddToRole(user.Id, role.Name);
}
دقت کنید که اگه بیش از یه کاربر پیش فرض رو میخواید ثبت کنید باید این خطوط رو هم تغییر بدیم، در غیر اینصورت باید Role مورد نظر رو فقط تنظیم کرد.
تا اینجای کار فقط مربوطه میشد به ثبت نقش های مورد نظر. حالا برای استفاده و تعیین اینکه کدوم نقش ها به چه قسمت هایی دسترسی دارند باید از حالت زیر استفاده کرد:
مثلا برای کنترلر Add میخوایم که کاربرهایی با نقش VIP و Admin اجازه ی دسترسی به این کنترلر رو داشته باشند:
[Authorize(Roles = "Admin, VIP")]
public ActionResult Add()
{
return View();
}
این ها مثال های ساده ای بودند، امیدوارم دوستان دیگه تکمیلش کنند :لبخندساده:
star_rh
یک شنبه 05 بهمن 1393, 11:24 صبح
راحترین راه استفاده از AuthorizeAttribute ها است.
ما برای هر Attribute برای کلاس ها و اکشن ها یک نام دسترسی اختصاصی خواهیم داشت. به عنوان مثال برای اکشن edit plugin خواهیم داشت edit_plugin .
[AuthorizeUser(AccessLevel = "edit_plugin")]
public ActionResult editPlugin()
{
return View();
}
هر role می تواند اجازه دسترسی به اون رو داشته باشه کا توسط ادمین ویرایش می شود.
در زیر role ادمین رو می بینید که می تواند چه کارهای انجام دهد.
db.RoleRights.Add(new MbNet.Models.RoleRight() {
RoleName="Admin",
Rights="switch_theme,edit_theme,active_plugin,edit_plugin"
});
و کلاس اتریب آن نیز به این صورت است.
public class AuthorizeUserAttribute : AuthorizeAttribute
{
// Custom property
public string AccessLevel { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var db = new DbNetContext();
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
string privilegeLevels = "";
foreach(var r in db.RoleRights)
{
if(httpContext.User.IsInRole(r.RoleName))
{
privilegeLevels = r.Rights;
break;
}
}
if (privilegeLevels.Contains(this.AccessLevel))
{
return true;
}
else
{
return false;
}
return true;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
filterContext.Result = new RedirectResult(urlHelper.Action("Index", "Error"));
}
}
تــــــــــــــــــــــــ مــــــــــــــــــــــــ ــــــــــــــــام
alireza_rashvand
چهارشنبه 08 بهمن 1393, 16:25 عصر
با سپاس از دوستان
چیزی که متوجه شدم اینکه اگر مثال رو اجرا نکرده باشیم باید فایل IdentityConfig رو ویرایش کنیم
کلاس هایی که باید اضافه بشه :
// Configure the RoleManager used in the application. RoleManager is defined in the ASP.NET Identity core assembly
public class ApplicationRoleManager : RoleManager<IdentityRole>
{
public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
: base(roleStore)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));
}
}
// This is useful if you do not want to tear down the database each time you run the application.
// public class ApplicationDbInitializer : DropCreateDatabaseAlways<ApplicationDbContext>
// This example shows you how to create a new database if the Model changes
public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context)
{
InitializeIdentityForEF(context);
base.Seed(context);
}
//Create User=Admin@Admin.com with password=Admin@123456 in the Admin role
public static void InitializeIdentityForEF(ApplicationDbContext db)
{
var userManager = HttpContext.Current.GetOwinContext().GetUserManage r<ApplicationUserManager>();
var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
const string name = "admin@example.com";
const string password = "Admin@123456";
const string roleName = "Admin";
//Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null)
{
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
var user = userManager.FindByName(name);
if (user == null)
{
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
// Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name))
{
var result = userManager.AddToRole(user.Id, role.Name);
}
}
}
}
چیزی که مشخصه در اولین بار اجرا میاد کاربر ادمین رو ثبت می کنه (Seed) که دوست عزیزم اقای نجفی پور توضیح دادن.
و همان طور که خود مثال role ادیمن رو اضافه کرده به قول اقای نجفی پور می شه یک حلقه ایجاد کرد سه کار یعنی
1- ثبت رول:
//Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null)
{
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
2- ثبت کاربر:
var user = userManager.FindByName(name);
if (user == null)
{
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
3- دادن role به کاربر:
// Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name))
{
var result = userManager.AddToRole(user.Id, role.Name);
}
را انجام داد... نکته اینکه این موارد همش در اولین قدمه... یعنی اگر بخواهیم مثلا سه role داشته باشیم می شه سه تا کاربر ایجاد کرد(یا یک کاربر با سه role داشته باشیم, البته نمی دونم می شه یانه) که در یک حلقه این سه نقش که ایجاد می شوند رو به انها داد, با این کار سه role رو هم ایجاد کردیم (seed : اگر نبود ایجاد می کنه)
اگر تا اینجا اشتباه کردم بگید...
ولی نکته ای که خودم در مثال دیدم کلاس RolesAdminController است فکر کنم استفاده از این کلاس خیلی بهتر باشه ... یا بهتره بگم اگر می خواهیم خودمان صفحه ای طراحی کنیم که ادمین رول ها رو ثبت کنه این کلاس به کار میاد...
چیزی که به نظرم میاد شابد بشه ترکیبی از این روشی که گفتیم و ثبت کاربری که در تاپیک قبلی(لینک دادم) به ان رسیدیم درست کرد البته باید تست کنم بعد می نویسم...
alireza_rashvand
چهارشنبه 08 بهمن 1393, 17:36 عصر
یه سوال برام پیش اومد:
کلاس ApplicationDbInitializer رو کجا بذاریم که اجرا بشه؟
تو مثال جستجو کردم به نظرم تو کلاس ApplicationDbContext باید کد زیر رو اضافه کرد
static ApplicationDbContext()
{
// Set the database intializer which is run once during application start
// This seeds the database with admin user credentials and admin role
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
}
ولی بازهم بعد از اجرای برنامه کلاس ApplicationDbInitializer اجرا نمی شه...
mohammadreza.najafipour
پنج شنبه 09 بهمن 1393, 09:52 صبح
اینجا دو تا مسئله پیش میاد که شبیه به هم هستند ولی هر کدوم کاربرد های متفاوت دارند.
فرض کنیم میخوایم یه پرتال رو به مشتری تحویل بدیم و ازمون خواسته شده کاربرهای مختلف نقش های مختلف داشته باشند. ما در اینجا میتونیم با تغییری که در جواب قبلی گفتم، نقش های مدنظر رو ایجاد کنیم.لزومی نداره اون نقش ها به کاربری داده بشه. اما همین کار رو هم میشه وقتی پرتال تکمیل شد، از طریق کنترلر RolesAdmin برای ثبت نقش های جدید استفاده کرد.
یعنی یک کار رو میشه به دو روش انجام داد.
به روش اول، همیشه مطمئن هستیم که نقش ها رو داریم. به روش دوم، همیشه باید خودمون اقدام به ساخت اون نقش ها کنیم.
توی مثال، کنترلرهای مختلفی وجود داره که همه ی کارهای مدنظرمون رو میشه با اون ها انجام داد. مثل تعریف کاربر جدید، ویرایش کاربرها، دادن نقش به کاربرها و ...
یه جورایی همه چی هست و فقط باید اقدام به شخصی سازی اون ها کرد :لبخندساده:
در مورد اینکه میشه به یه کاربر بیش از یک نقش رو داد یا نه، باید بگم که این کار امکان پذیر هستش.
اما در مورد سوال دوم:
توی کلاس Startup، فایل Startup.Auth.cs، تابع ConfigureAuth وقتی اجرا میشه، خط اولش مسئول فراخوانی تابع Create از کلاس ApplicationDbContext هستش که باعث فراخوانی قسمتی که مد نظرتون هست میشه
app.CreatePerOwinContext(ApplicationDbContext.Crea te);
alireza_rashvand
پنج شنبه 09 بهمن 1393, 11:36 صبح
حرف شما کاملا درسته به هر صورتی می شه نوشت قصدم هم همین بود که متوجه بشم چطور رول ها ثبت می شند بقیه کار ها شخصی سازیه.
(توضیحات اضافه ای که میدم بیشتر برای یادگیری خودمه وگرنه شما که استاد هستید :لبخندساده:)
اما سوال دوم : سپاس نکته خوبی رو گفتید
ولی هر کار کردم کلاس ApplicationDbInitializer رو نتونستم فراخوانی کنم
کد زیر رو در کلاس ApplicationDbContext قرار دادم ولی نشد...
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
خط بالا اجرا شد ولی نمی دونم چرا با اینکه یک نیو از کلاس ApplicationDbInitializer ساخته می شه به کلاسش نمیره تا Seed اجرا بشه...
من از این تاپیک ها به عنوان یاداشت برداری استفاده می کنم معمولا پیش میاد که چند هفته از برنامه نویسی MVC دور می شم هر زمان برمی گردم این تاپیک ها کمک می کنه سریع نکات یادم بیاد, برای همین بدهیات رو هم توضیح می دم :)
واقعا MVC رو از سر علاقه دنبال می کنم گرچه هنوز یک ریال هم ازش در نیاوردم , بیچاره webform که جیب ما رو پر می کنه ولی ما عاشق MVC هستیم :لبخندساده:
mohammadreza.najafipour
پنج شنبه 09 بهمن 1393, 20:02 عصر
خواهش می کنم. اتفاقا توضیحاتی که می دید خیلی خوبه و باعث میشه بقیه دوستان هم کامل متوجه بشن قضیه رو. ما شاگردیم هنوز :چشمک:
البته کامل مطمئن نیستم ولی فکر کنم چون کلاس
ApplicationDbInitializer داره از DropCreateDatabaseIfModelChanges مشتق میشه، تا وقتی که مدل تغییر نکنه سراغ Seed نمیره. برای امتحان یکی از مدل ها رو تغییر بدید تا ببینیم این اتفاق میفته یا نه.
وب فرم هنوز هم دوست داشتنی هستش، ما که فعلا از دوتاش نون میخوریم :لبخند: ولی معماری MVC خیلی جذاب تره :لبخندساده:
alireza_rashvand
شنبه 11 بهمن 1393, 09:15 صبح
متاسفانه مودل رو هم تغییر دادم نشد...
alireza_rashvand
یک شنبه 16 فروردین 1394, 16:47 عصر
با سلام خدمت دوستان و تبریک سال نو
به علت اهمیت موضوع یک بار دیگر از دوستان درخواست می کنم اگر می دانند مشکل از کجاست کمک کنند .
(بنابرین برای اخرین بار تاپیک را بالا می اورم)
sunn789
دوشنبه 17 فروردین 1394, 11:40 صبح
سلام دوست عزیز، من بدون هیچ ایرادی و این همه دستکاری فقط مثال رو از طریق nuget نصب مبکنم و در قسمت نام کاربری و کلمه عبور و نوع نقش رو عوض میکنم و پروژه رو اجرا میکنم ، ورود رو میزنم تمام و بهد لینکی برای ایجاد رول خود به خود ایجاد میشود و و نقش را به راحتی اضافه میکنید
mohammadreza.najafipour
سه شنبه 18 فروردین 1394, 11:43 صبح
با سلام خدمت دوستان و تبریک سال نو
به علت اهمیت موضوع یک بار دیگر از دوستان درخواست می کنم اگر می دانند مشکل از کجاست کمک کنند .
(بنابرین برای اخرین بار تاپیک را بالا می اورم)
همین الان برای مطمئن شدن، یکی از مدل ها رو تغییر دادم و تابع Seed فراخوانی شد.
رونده کار به این صورت برای مثال:
1- فایل IdentityModels رو باز می کنیم و به کلاس ApplicationUser یک متغیر اضافه می کنیم
public string MyVariable{ get; set; }
2- یک Breakpoint برای تابع Seed میذاریم
3- برنامه رو اجرا می کنیم و میریم برای ثبت نام (دقت کنید تا ثبت نام نکنیم این تغییرها اتفاق نمی افته)
4- بعد از وارد کردن اطلاعات برای ثبت نام تابع Seed فراخوانی میشه.
نکته: البته شاید چون متغییر رو همینطوری اضافه کردیم و جایی استفاده نکردیم برنامه با خطا مواجه بشه :لبخندساده:
alireza_rashvand
سه شنبه 18 فروردین 1394, 15:49 عصر
باسپاس از دوستان
نمی دونم تمرکز کافی ندارم یا درست متوجه نمی شوم خلاصه بد جور گیج شدم!:متفکر:
سلام دوست عزیز، من بدون هیچ ایرادی و این همه دستکاری فقط مثال رو از طریق nuget نصب مبکنم و در قسمت نام کاربری و کلمه عبور و نوع نقش رو عوض میکنم و پروژه رو اجرا میکنم ، ورود رو میزنم تمام و بهد لینکی برای ایجاد رول خود به خود ایجاد میشود و و نقش را به راحتی اضافه میکنید
دقیقا متوجه نشدم که منظورتان از نقش رو عوض می کنم چیه!
مثال رو در یک پروژه جدید نصب کردم (install Package)
بعد از اجرای برنامه با اینکه admin@example.com رو در InitializeIdentityForEF به عنوان پیش فرض قرار داده , ولی بازهم کلاس ها مقدار دهی نشد نه کاربر ادمین ثبت شد نه رول ادمین,
یعنی InitializeIdentityForEF که مسئولیت مقدار اولیه رو داره اجرا نمی شه.
یک کاربر ثبت کردم ولی بازهم این کلاس فراخوانی نشد!
تاجایی که بنده می دانم باید به صورت پیش فرض حداقل یک رول داشته باشیم تا اولین کاربر بتونه دیگر کاربران رو مدیریت کنه حتی اگر بخواهیم برای ثبت رول یک صفحه ایجاد کنیم حتما باید یک کاربر با سطح دستری داشته باشیم تا او این کار رو انجام بده.
[Authorize(Roles = "Admin")]
پس باید در ابتدا رول و ادمین ثبت بشه یعنی همان InitializeIdentityForEF باید اجرا بشه که متاسفانه نمی شه.
لطفا اگر دقیقتر می توانید توضیح دهید... و اگر بنده اشتباهی در گفته هایم کردم برطرف کنید.
--------------------------------------------
همین الان برای مطمئن شدن، یکی از مدل ها رو تغییر دادم و تابع Seed فراخوانی شد.
رونده کار به این صورت برای مثال:
1- فایل IdentityModels رو باز می کنیم و به کلاس ApplicationUser یک متغیر اضافه می کنیم
public string MyVariable{ get; set; }
2- یک Breakpoint برای تابع Seed میذاریم
3- برنامه رو اجرا می کنیم و میریم برای ثبت نام (دقت کنید تا ثبت نام نکنیم این تغییرها اتفاق نمی افته)
4- بعد از وارد کردن اطلاعات برای ثبت نام تابع Seed فراخوانی میشه.
نکته: البته شاید چون متغییر رو همینطوری اضافه کردیم و جایی استفاده نکردیم برنامه با خطا مواجه بشه :لبخندساده:
اگر مدلی رو تغییر بدیم تا دیتابیس رو اپدیت نکنیم برنامه اجرا نخواهد شد پس باتوجه به توضیح شما ابتدا یک متغیر اضافه کردم بعد دیتابیس رو اپیدت کردم ولی بازهم seed اجرا نشد حتی ثبت نام هم کردم بازهم نشد.
شما خودتان امتحان کردید, اجرا شد؟
sunn789
سه شنبه 18 فروردین 1394, 16:12 عصر
\س از نصب از نیوگت من نام و نام کاربری و نقش را تغییر میدهم و تمامی مدلها را هم میسازم و در DBSet<> هم مودلها را اضافه میکنم ، البته مودلهایی که خودم ساختم نه مودل مربوط به مدیریت کاربران.
کلمه IdentitySample را به namespace پروژه تغییر میدهم که راحت ترین آن استفاده از ctrl+f و تغییر در کل پروژه است و حدود 42، IdentitySample به نام پروژه تغییر میابد
پروزه را که اجرا کنید تازمانی که در خواستی برای سرور ارسال نکنید بانک اطلاعاتی , seed ها ایجاد نمیشوند ، در این مرحله نیاز به استفاده از migration ندارید ، و در صورتیکه تغییر در مودل دادین از این جا به بعد نیاز به migration دارید
alireza_rashvand
سه شنبه 18 فروردین 1394, 17:34 عصر
نمی دونم چرا قبلا تابع InitializeIdentityForEF اجرا نمی شد ولی به یک باره انجام شد.!
با توجه به همه توضیحات دوستان برای ثبت 1 کاربر و 3 رول
تابع InitializeIdentityForEF را به این صورت ویرایش کردم...
var userManager = HttpContext.Current.GetOwinContext().GetUserManage r<ApplicationUserManager>();
var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
const string name = "a@a.com";
const string password = "Alireza@110";
string[] roleName = new string[] { "SuperAdmin", "Admin", "User" };
foreach (var item in roleName)
{
//Create Role Admin if it does not exist
var role = roleManager.FindByName(item);
if (role == null)
{
role = new IdentityRole(item);
var roleresult = roleManager.Create(role);
}
}
// role = new IdentityRole(roleName[0]);
var user = userManager.FindByName(name);
if (user == null)
{
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
// Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(roleName[0]))
{
var result = userManager.AddToRole(user.Id, roleName[0]);
}
ابتدا در پروژه ای که مثال را نصب نکرده بودم اجرا کردم خطا در خط زیر می داد:
var role = roleManager.FindByName(item);
خطا:
Value cannot be null
در ابتدای این تاپیک, (http://barnamenevis.org/showthread.php?483438-Role-%D8%AF%D8%B1-MVC&p=2167018&viewfull=1#post2167018) (با توجه به کمک دوستان)چند تابع به کلاس IdentityConfig اضافه کردم قصد نداشتم مثال رو نصب کنم... ولی همان تکه کد بالا را در پروژه ای که مثال را درونش نصب کردم اجراش کردم مشکلی نداشت!
شاید مواردی را خود مثال به پروژه اضافه کرده که بنده بی خبر بودم بنابرین پروژه قبل دچار اشکال شد...
به هر حال از پروژه ای استفاده کردم که مثال درونش نصب شده بود.
فقط نکته ای که وجود دارد این است که تابع InitializeIdentityForEF در اولین ثبت کاربر همراه با ایجاد یتابیس فراخونی می شود یعنی اگر دیتابیس باشد کاربر ثبت کنیم این کلاس فراخوانی نمیشه.
سپاس از همه دوستان.
alireza_rashvand
پنج شنبه 27 فروردین 1394, 16:04 عصر
نکته بعدی :
زمان ثبت یک فرد می تونیم در کنار ثبت اطلاعات یک Role هم به او بدیم
مثلا اگر فردی در سایت ثبت نام کرد در همان ابتدا رول یوزر رو هم بگیره.
در کنترلر Account در اکشن Register کد زیر رو بعد شرط result.Succeeded وارد می کنیم
UserManager.AddToRole(user.Id, "User");
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.