PDA

View Full Version : سطح دسترسی برای کاربران



sara1213
یک شنبه 17 مرداد 1395, 12:36 عصر
درود بر شما
من صفحه لاگین درست کردم در ASP و میخام اگر مدیر وارد شد یک سری صفحات رو ببینه واگر کاربر وارد شود یک سری صفحات رو ببیند و جداول برای اطلاعات کاربران و نقش آنها رو هم درست کردم.( 1 برای مدیر و 2 برای کاربران.)
لطفا راهنمایی کنید.

bomb23
یک شنبه 17 مرداد 1395, 15:50 عصر
سلام شما به راحتی میتونید با استفاده از identity این موضوع رو پیاده سازی کنید. قبلا مایکروسافت اینکارو انجام داده ونیازی نیست شما مجدد اینکارو کنید فقط کافیه ازش استفاده کنید:
لینک اموزش :

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiGnci6nq_OAhWpAcAKHWo-CBQQFggeMAA&url=http%3A%2F%2Fparsrad.com%2FContents%2F1141%2F% 25D8%25A2%25D9%2585%25D9%2588%25D8%25B2%25D8%25B4-%25D8%25A7%25D8%25AD%25D8%25B1%25D8%25A7%25D8%25B2-%25D9%2587%25D9%2588%25DB%258C%25D8%25AA-user-identity-%25D8%25A8%25D8%25AE%25D8%25B4-%25D8%25A7%25D9%2588%25D9%2584&usg=AFQjCNGu4CSUYxDiVx1cfrjb6PFy3KGW_g

sara1213
یک شنبه 17 مرداد 1395, 15:59 عصر
سپاس از راهنمایی تون ولی من برای ASPMVCنمیخاستم، چون من در ابتدای شروع ASP هستم.
لطفا برای ASP راهنمایی بفرمایید.
سپاس

bomb23
یک شنبه 17 مرداد 1395, 16:54 عصر
identity فقط مخصوص mvc نیست و میتونید در asp.net هم استفاده کنید.

sara1213
سه شنبه 19 مرداد 1395, 10:14 صبح
"قبل از شروع بايد بگم کسي که شروع به کار با asp.net user identity ميکنه حتما يه آشنايي با برنامه نويسي Asp.net mvc داره و پيش فرض ما در آموزش اين هست و از توضيحات اضافه پرهيز ميکنيم تا حجم مقاله خيلي زياد نشود."
من آشنایی با MVC ندارم.

bomb23
سه شنبه 19 مرداد 1395, 10:36 صبح
عرض کردم خدمتتون identity نیازی به mvc نداره! اگه منظورتون مقالست که کلیتشو بخونید تا مفاهیم رو یاد بگیرید بعد در ویژوال استدیو ترجیحا نسخه های آخر(2015) یک پروژه جدید بسازید و نوع پروژه رو روی webform بذارید و authetication رو روی individual user account بذارید حالا پروژه رو runکنید و یه یوزر ایجاد کنید دیگه دسترسی دارید به identity پیاده شده خود مایکروسافت و جداولش در دیتابیستون ایجاد شده و میتونید customize روش انجام بدید

hamid_0341
سه شنبه 19 مرداد 1395, 13:17 عصر
میتونید از identity استفاده کنید ولی اگر نخواستید میتونید هنگام لاگین کاربرتون به اون role اختصاص بدید و توی صفحه اصلی چک کنید که اگر توی role مورد نظر بود یک سری صفحات و اگر نبود یک سری صفحات دیگه رو بهش نشان بده. اگر مشکل داشتید بگید براتون نمونه قراربدم.

sara1213
چهارشنبه 20 مرداد 1395, 07:35 صبح
درود بر شما
من میخام از role استفاده کنم و جداولش هم ساختم در SQL ( یک جدول برای اطلاعات کاربر، یک جدول برای rol: مدیر و کاربر، یک مدیر هست)ولی نمیدونم چه کدی باید بنویسم.
لطفا راهنمایی بفرمایید.
سپاس

bomb23
چهارشنبه 20 مرداد 1395, 08:28 صبح
اگر دنبال یک روش ساده هستید:
در ابتدای همه فرم های خود یک session مثلا تحت عنوان userRole در نظر بگیرید. و بررسی کنید آیا مقدار موجود در آن امکان دسترسی به این فرم را دارد یا خیر. اگر نداشت به صفحه لاگین راهنمایی شود و اگر داشت که دسترسی میگیرد. در صفحه لاگین وقتی کاربر احراز هویت میشود این سشن با نقش مربوطه کاربر پر میشود!

من به هیچ عنوان استفاده از این روش رو توصیه نمیکنم!

sara1213
چهارشنبه 20 مرداد 1395, 12:32 عصر
لطفا در این باره (role ) مقاله یا آموزشی بگویید که من روش کار رو یاد بگیرم.
سپاس

bomb23
چهارشنبه 20 مرداد 1395, 15:45 عصر
http://www.asp.net/web-forms/overview/older-versions-security/roles/creating-and-managing-roles-cs

hamid_0341
پنج شنبه 21 مرداد 1395, 07:30 صبح
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
string[] roles = null;
if(user is admin)
{
roles[0] = "Admin";
}
else
{
roles[0] = "User";
}

HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);


و وقتی که خواستید role رو چک کنید

if (User.IsInRole("Admin"))
{


}
else
{


}

keyone72
پنج شنبه 21 مرداد 1395, 13:06 عصر
درود بر شما
من صفحه لاگین درست کردم در ASP و میخام اگر مدیر وارد شد یک سری صفحات رو ببینه واگر کاربر وارد شود یک سری صفحات رو ببیند و جداول برای اطلاعات کاربران و نقش آنها رو هم درست کردم.( 1 برای مدیر و 2 برای کاربران.)
لطفا راهنمایی کنید.

اخرین پست

http://barnamenevis.org/showthread.php?527593-%D8%B3%D8%B7%D8%AD-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%DA%86%D9%86%D8%AF-%D8%A8%D8%AE%D8%B4%DB%8C

sara1213
پنج شنبه 21 مرداد 1395, 13:18 عصر
سپاس که راهنمایی میفرمایید.
من کد لاگین کردن+عکس از جدول مشخصات کاربران+عکس از جدول نوع کاربر رو ضمیمه کردم. لطفا در صورت امکان مشاهده کنید و بگویید من این کدهایی که برام نوشتید رو کجا بنویسم.
سپاس141941141942






using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data.SqlClient;

public partial class MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
string user = txtusername.Text;
string pass = txtpassword.Text;
string con = "Data Source=.;Initial Catalog=Web Programming;Integrated

Security=True";
SqlConnection conn = new SqlConnection(con);//برای اینکه به sql وصل شیم
SqlDataReader dr;//اطلاعات select داخل dr میریزه
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;//hatman bayad begi rouye kodam connection
cmd.CommandText = "select * from tbl_User where UserName=@UserName and

Password=@Password";//متغیر در sql با @ است
cmd.Parameters.AddWithValue("@UserName", txtusername.Text);//مقدار دهی متغیر
cmd.Parameters.AddWithValue("@Password", txtpassword.Text);
dr = cmd.ExecuteReader();//نتیجه qure داخل dr
if(dr.Read()==true)//یعنی اون سطر رو بخونه و داخلش مقداری هست
{
Session["FullName"]=dr["FirstName"].ToString()+" "+dr["LastName"].ToString();
LblFullName.Text=Session["FullName"].ToString();
Lblsession1.Visible = true;
LblFullName.Visible = true;
Lblsession3.Visible = true;
//نام کاربری و رمز عبور درست است

}
else
{
Label3.Visible = true;
//نام کاربری و رمز عبور درست نیست
}


conn.Close();//ta server sangin nashe
conn.Dispose();//hafeze ra az beyn bebarad
}
}

شرلوک هلمز
پنج شنبه 21 مرداد 1395, 14:49 عصر
به این آدرس برو کامل توضیح داده
http://substantialmotion.ir/ShowNew.aspx?NID=28
فقط دوستان اگر کسی میدونه که چطور میشه لینک ها و متدها و دکمه ها را با توجه به role کنترل کرد ممنون میشوم بگه

keyone72
جمعه 22 مرداد 1395, 18:35 عصر
سپاس که راهنمایی میفرمایید.
من کد لاگین کردن+عکس از جدول مشخصات کاربران+عکس از جدول نوع کاربر رو ضمیمه کردم. لطفا در صورت امکان مشاهده کنید و بگویید من این کدهایی که برام نوشتید رو کجا بنویسم.
سپاس141941141942






using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data.SqlClient;

public partial class MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
string user = txtusername.Text;
string pass = txtpassword.Text;
string con = "Data Source=.;Initial Catalog=Web Programming;Integrated

Security=True";
SqlConnection conn = new SqlConnection(con);//برای اینکه به sql وصل شیم
SqlDataReader dr;//اطلاعات select داخل dr میریزه
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;//hatman bayad begi rouye kodam connection
cmd.CommandText = "select * from tbl_User where UserName=@UserName and

Password=@Password";//متغیر در sql با @ است
cmd.Parameters.AddWithValue("@UserName", txtusername.Text);//مقدار دهی متغیر
cmd.Parameters.AddWithValue("@Password", txtpassword.Text);
dr = cmd.ExecuteReader();//نتیجه qure داخل dr
if(dr.Read()==true)//یعنی اون سطر رو بخونه و داخلش مقداری هست
{
Session["FullName"]=dr["FirstName"].ToString()+" "+dr["LastName"].ToString();
LblFullName.Text=Session["FullName"].ToString();
Lblsession1.Visible = true;
LblFullName.Visible = true;
Lblsession3.Visible = true;
//نام کاربری و رمز عبور درست است

}
else
{
Label3.Visible = true;
//نام کاربری و رمز عبور درست نیست
}


conn.Close();//ta server sangin nashe
conn.Dispose();//hafeze ra az beyn bebarad
}
}










یه فیلد با نام Role به جدول یوزر اضافه کن و اینم راهنماش


برای این منظور در دیتا بیستون یک فیلد با نام Role اختصاص بدید و این کد رو در فایل Global.asax وارد کنید


protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e)
{
if (FormsAuthentication.CookiesSupported == true)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
try
{
string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
var blUser = new UserRepository();
string roles = blUser.Where(p => p.UserName == username).Single().Roles;

e.User = new GenericPrincipal(new System.Security.Principal.GenericIdentity(username ), roles.Split(','));

}
catch (Exception)
{
}

}
}
}




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



[Authorize]
public class PanelController : Controller
{
[AllowAnonymous]
public ActionResult a()
{
}
[Authorize(Roles = "User")]
public ActionResult b()
{
}
[Authorize(Roles = "Admin,User")]
public ActionResult c()
{
}
}


در کد بالا کلا اعتبار سنجی میشن همه اکشن ها
اکشن اول اعتبار سنجی نمیشه و هر کاربری میتونه وارد بشه
اکشن دوم فقط کاربری که نقشش یوزر هست میتونه وارد بشه این User همون فیلدی در دیتابیس ست که به صورت رشته تعریف شده و برابر مثلا User یا Admin است یا هردو به این شکل Admin,User در دیتابیس باید سیو شود


یا در ویو ها از این کد استفاده کنید


@if (Model.User.Roles == "Admin")
{
<div>من ادمین هستم</div>
}

sara1213
شنبه 23 مرداد 1395, 08:48 صبح
این صفحه که معرفی کردید کمکی به من نکرد.

sara1213
شنبه 23 مرداد 1395, 08:49 صبح
سپاس. اما من باید چی اضافه کنم که Error نده. if (FormsAuthentication.CookiesSupported == true) این ها همه خطا میدن....

bomb23
یک شنبه 24 مرداد 1395, 09:00 صبح
به این آدرس برو کامل توضیح داده
http://substantialmotion.ir/ShowNew.aspx?NID=28
فقط دوستان اگر کسی میدونه که چطور میشه لینک ها و متدها و دکمه ها را با توجه به role کنترل کرد ممنون میشوم بگه

در صورتی که از identity استفاده میکنید کافیه به ازای هر دکمه ، فرم یا متد مورد نظرتون یک role تعریف کنید و قبل از اجرای اون رویداد attribute نقش مورد نظرتون رو فراخوانی کنید!

sara1213
یک شنبه 24 مرداد 1395, 13:09 عصر
لطفا اگر کسی میدونه که در انقلاب کجا میتونه حضوری بهم کمک کنه برای درست کردن سطح دسترسی، به من اعلام کنه. <br>سپاس

شرلوک هلمز
چهارشنبه 03 شهریور 1395, 17:51 عصر
در صورتی که از identity استفاده میکنید کافیه به ازای هر دکمه ، فرم یا متد مورد نظرتون یک role تعریف کنید و قبل از اجرای اون رویداد attribute نقش مورد نظرتون رو فراخوانی کنید!
ممنون دوست عزیز
برای اینکار من باید برای بیشتر متدها چک کنم ببینم user چه کسی هست که به نظر منطقی نمیاد . البته من در این مورد تجربه ی زیادی ندارم . ولی میخواستم ببینم می شود مثلا با http handler یک کدی نوشت و داخل ان مثلا چک کرد که اگر اسم متد در خواستی کابر insert بود user نتواند آنرا اجرا کند. اینطوری میشه همه ی متدها مثلا insert را با یک نام بخصوص نام گذاری کرد و آنها را در http handler چک کرد.
یک سوال دیگه هم دارم .
سایتهای که تا لاگین نکنی اجازه دانلود نمی دهند و به جای لینک دانلود از یک نوشته استفاده میکنند از چه روشی استفاده میکنند.

bomb23
پنج شنبه 04 شهریور 1395, 07:57 صبح
ممنون دوست عزیز
برای اینکار من باید برای بیشتر متدها چک کنم ببینم user چه کسی هست که به نظر منطقی نمیاد . البته من در این مورد تجربه ی زیادی ندارم . ولی میخواستم ببینم می شود مثلا با http handler یک کدی نوشت و داخل ان مثلا چک کرد که اگر اسم متد در خواستی کابر insert بود user نتواند آنرا اجرا کند. اینطوری میشه همه ی متدها مثلا insert را با یک نام بخصوص نام گذاری کرد و آنها را در http handler چک کرد.
یک سوال دیگه هم دارم .
سایتهای که تا لاگین نکنی اجازه دانلود نمی دهند و به جای لینک دانلود از یک نوشته استفاده میکنند از چه روشی استفاده میکنند.

هر دو عملیات مد نظر شما رو کاری که در بالا عرض کردم براتون فراهم میکنه. دیگه نیازی نیست شما چک کنید که user هست یا نه شما باید به ازای هر متدی که به دسترسی خاص نیاز داره یک نقش تعریف کنید و یک identity attribute بالای اون قرار بدید همین! حالا به یوزر هاتون نقش میدید. یه Attribute به نهم [authourize] هست که چک میکنه کاربر لاگین هست یا نه اگه نبود دیگه دسترسی نداره با این خاصیت هم میشه لینک های دانلود و... رو برای کاربران عضو و مهمان کنترل کرد.

شرلوک هلمز
جمعه 12 شهریور 1395, 23:10 عصر
من فعلا role کاربر را میخوانم و بر مبنای ان دکمه ها را غیر فعال میکنم از روشی که شما گفتید هم سعی میکنم استفاده کنم ببینم چی میشه ممنون

شرلوک هلمز
شنبه 13 شهریور 1395, 15:55 عصر
هر دو عملیات مد نظر شما رو کاری که در بالا عرض کردم براتون فراهم میکنه. دیگه نیازی نیست شما چک کنید که user هست یا نه شما باید به ازای هر متدی که به دسترسی خاص نیاز داره یک نقش تعریف کنید و یک identity attribute بالای اون قرار بدید همین! حالا به یوزر هاتون نقش میدید. یه Attribute به نهم [authourize] هست که چک میکنه کاربر لاگین هست یا نه اگه نبود دیگه دسترسی نداره با این خاصیت هم میشه لینک های دانلود و... رو برای کاربران عضو و مهمان کنترل کرد.
دوست گرامی شما بسیار کلی توضیح می دهید مثلا برای اضافه کردن authorize باید فضای نام آن اضافه شود که در vs بصورت پیش فرض وجود ندارد و باید با nuget انرا اضافه کرد من اینکار را کردم و این attribult شناسایی شد ولی بازهم کار نمیکند.
من تعیین هویت را بصورت دستی نوشته ام و از WAT پیش فرض استفاده نکرده ام کلاس RoleProvider را نیز بصورت دستی اضافه کرده و متد GetRolesForUser(string username) را نیز خودم در کلاس ویرایش کرده ام.
اگر ممکن است کمی واضح تر توضیح دهید.
من الان role کاربر را از طریق کلاس فوق میخوانم و بر اساس ان دکمه ها را هنگام لاگین کاربر فعال یا غیر فعال میکنم پوشه هایی هم که نباید دسترسی داشته باشد را نیز از طریق web.config تعیین اعتبار میکنم

bomb23
یک شنبه 14 شهریور 1395, 10:45 صبح
این دو تا مقاله identity رو بخونید کمکتون میکنه:
parsrad.com/Contents/1141 (http://parsrad.com/Contents/1141)
parsrad.com/Contents/1142 (http://parsrad.com/Contents/1142)

شرلوک هلمز
دوشنبه 26 مهر 1395, 23:10 عصر
من برنامه را نوشتم و مشکل خاصی هم ندارم اما اگر کسی در مورد provider member ship اختصاصی اطلاعات داره ممنون می شم توضیح بده

a666666
پنج شنبه 04 آذر 1395, 00:01 صبح
در این پست مجموعه تصویری آموزش ASP.Net 2010 از مبتدی تا پيشرفته را آماده کرده ایم. با مشاهده این فیلم آموزشی میتوانید یک وب سایت حرفه ای پیاده سازی کنید.
کیفیت فایل های تصویری این مجموعه کاملآ استاندارد می باشد. (http://banke-maghalat.ir/page.php?id=81)



قسمت اول (http://cld.persiangig.com/download/uTUNnQWZeb/j1_ASP.Net_Banke-maghalat.ir.rar/dl)


قسمت دوم
(http://cld.persiangig.com/download/DOFKay4V8G/j2_ASP.Net_Banke-maghalat.ir.rar/dl)

قسمت سوم
(http://cld.persiangig.com/download/gKg2eYubFE/j3_ASP.Net_Banke-maghalat.ir.rar/dl)

قسمت چهارم (http://cld.persiangig.com/download/vYTntTX4M4/j4_ASP.Net_Banke-maghalat.ir.rar/dl)

قسمت پنجم (http://cld.persiangig.com/download/46WP1LqKhA/j5_ASP.Net_Banke-maghalat.ir.rar/dl)