PDA

View Full Version : حرفه ای: چک کردن کاربر با چند role ;تعیین سطح دسترسی



saeed31641
دوشنبه 21 اردیبهشت 1394, 17:18 عصر
با سلام
با توجه به اینکه هر کاربر میتونده چند تا نقش داشته باشه چطوری این نقش ها رو تو کوکی ذخیره کنم
یه کاربر دارم بنام
username:amir
rolename:user
rolename:writer
با دوتا نقش.حالا وقتی لوگین میشه میخواهو هر دو نقش داشته باشه من امدم از بانک نقش های کاربر داخل یه لیست ریختم ولی زمان ثبت تو کوکی فقط یه نقش می تونم بریزم


var cookie = new LabCookie
{
UserName = user.UserName,
FirstName = user.Name,
LastName = user.Family,
UserId = user.USER_ID,
RememberMe = false,
// Roles = new List<string> { "administrator" }
Roles = new List<string> { user.Role_name ?? "user" }

};

string userData = JsonConvert.SerializeObject(cookie);
var ticket = new FormsAuthenticationTicket(1, cookie.UserName, DateTime.Now,
DateTime.Now.Add(FormsAuthentication.Timeout),
createPersistentCookie, userData);
string encTicket = FormsAuthentication.Encrypt(ticket);
var httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = DateTime.Now.Add(FormsAuthentication.Timeout) };

_httpContext.Response.Cookies.Add(httpCookie);

HOSSEINONLINE7
دوشنبه 21 اردیبهشت 1394, 20:44 عصر
سلام چرا نقش هاش را توی کوکی میخواید ذخیره کنید ؟ من میام توی جدول کاربران ذخیره میکنم و موقع لاگین چک میکنم .

از فیلتر Autorize میتونید استفاده کنید براحتی سطح دسترسی را مدیریت میکنه .

saeed31641
دوشنبه 21 اردیبهشت 1394, 22:15 عصر
سلام چرا نقش هاش را توی کوکی میخواید ذخیره کنید ؟ من میام توی جدول کاربران ذخیره میکنم و موقع لاگین چک میکنم .

از فیلتر Autorize میتونید استفاده کنید براحتی سطح دسترسی را مدیریت میکنه .


من از از فیلتر Autorize استفاده کردم که از کوکی استفاده مکینه.به مشکل برخوردم

sohil_ww
دوشنبه 21 اردیبهشت 1394, 22:34 عصر
با سلام
با توجه به اینکه هر کاربر میتونده چند تا نقش داشته باشه چطوری این نقش ها رو تو کوکی ذخیره کنم
یه کاربر دارم بنام
username:amir
rolename:user
rolename:writer
با دوتا نقش.حالا وقتی لوگین میشه میخواهو هر دو نقش داشته باشه من امدم از بانک نقش های کاربر داخل یه لیست ریختم ولی زمان ثبت تو کوکی فقط یه نقش می تونم بریزم


var cookie = new LabCookie
{
UserName = user.UserName,
FirstName = user.Name,
LastName = user.Family,
UserId = user.USER_ID,
RememberMe = false,
// Roles = new List<string> { "administrator" }
Roles = new List<string> { user.Role_name ?? "user" }

};

string userData = JsonConvert.SerializeObject(cookie);
var ticket = new FormsAuthenticationTicket(1, cookie.UserName, DateTime.Now,
DateTime.Now.Add(FormsAuthentication.Timeout),
createPersistentCookie, userData);
string encTicket = FormsAuthentication.Encrypt(ticket);
var httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = DateTime.Now.Add(FormsAuthentication.Timeout) };

_httpContext.Response.Cookies.Add(httpCookie);


چرا یه کاربرت باید چند تا نقش داشته باشه ؟
این سئوالی بود که خودمم تو پروژه های میپرسم از خودم و اگه نیاز باشه این کارو می کنم من با فیلتر authorize استفاده می کنم مشکلیم ندارم باهاش (حتی وقتی کاربرام چندتا سطح دسترسی دارند)
اینم کدش

protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e) {
if (FormsAuthentication.CookiesSupported == true)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
UseBco.Models.BLL.Repositories.UsersRepositores user = new Models.BLL.Repositories.UsersRepositores();
UserStatic.SetProp = user.Where(p => p.UserName == username).Single();
e.User = new GenericPrincipal(new System.Security.Principal.GenericIdentity(username ), UserStatic.Role.Split(','));
}
}
}

saeed31641
سه شنبه 22 اردیبهشت 1394, 07:42 صبح
چرا یه کاربرت باید چند تا نقش داشته باشه ؟
این سئوالی بود که خودمم تو پروژه های میپرسم از خودم و اگه نیاز باشه این کارو می کنم من با فیلتر authorize استفاده می کنم مشکلیم ندارم باهاش (حتی وقتی کاربرام چندتا سطح دسترسی دارند)
اینم کدش

protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e) {
if (FormsAuthentication.CookiesSupported == true)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
UseBco.Models.BLL.Repositories.UsersRepositores user = new Models.BLL.Repositories.UsersRepositores();
UserStatic.SetProp = user.Where(p => p.UserName == username).Single();
e.User = new GenericPrincipal(new System.Security.Principal.GenericIdentity(username ), UserStatic.Role.Split(','));
}
}
}

لطفا توضیح درباره کدهاتون توضیح دقیق تر و بگید کجا استفاده کردین.بابت وسوالتون باید بگم تو یه سیتیم یه کاربر میتونه هم مدیر باشه و هم کاربر .نمیشه که دوتا نام کاربری تعریف کرد یه تو یستم دانشگاه یه کاربر می تونه هیت علمی باشه و هم کارمند. و ...