PDA

View Full Version : لود ماژول بر اساس نقش



bftarane
یک شنبه 07 آبان 1391, 10:36 صبح
سلام لطفاً مقاله اي که لينکش رو در زير آوردم ببينيد (تشخيص هويت پيشرفته و مديريت نقش ها)
how2learnasp.net/article.aspx (http://barnamenevis.org/how2learnasp.net/article.aspx)


من مي خوام به جاي صفحه هاي مختلف از يوزر کنترلهاي مختلف استفاده کنم.
بنابراين يه صفحه Default.aspx دارم.
تعدادي يوزرکنترل در پوشه Modules دارم.
به جاي جدول tbl_pages يه جدول به اسم tbl_modules ايجاد کردم و به جاي اسم صفحه اسم ماژول رو ذخيره مي کنم

حالا سوال من از شما دوستان اينه که به جاي کد زير که نام صفحه رو به ما ميده

string PageName = System.IO.Path.GetFileName(Request.Path);

براي بدست آوردن نام ماژول چه کدي ميشه نوشت؟

.................................................. ..............

راه زير به نظرتون چطوره؟
1. در رويداد کليک دکمه ورود role رو که داريم
به وسيله کوئري استرينگ به صفحه Default بفرستيم

که البته اينجا هم مشکل دارم
آخه در رويداد کليک دکمه لوگين اين کد وجود داره


Response.Redirect(FormsAuthentication.GetRedirectU rl(txt_uname.Text, chk_rememberme.Checked));

حالا من چه جوري بايد از کوئري استرينگ استفاده کنم؟
من به صورت زير بلدم

response.redirect("default.aspx?rolename=role");


ولي با اون response.redirect بالا چه جوري بايد اين رو پياده کنم؟

2. با همچين دستوراتي

select Modulename from tbl_modules where ModuleRole=@modulerole

نام ماژول رو به دست بيارم در صفحه
نمي دونم اين روش خوبه يا ميشه يه جوري نام ماژول رو مثل همون نام صفحه به با يه روش بهينه تر و آسونتر به دست آورد.

ممنون مي شم پاسخ بديد خيلي حل اين مسئله برام مهمه.

Mag-Mag
یک شنبه 07 آبان 1391, 11:26 صبح
آدرس لینک مقالتون اشتباست
نتونستم ببینمش

شما می تونید یک کلک ساده بزنید
در جدول tbl_modules یک ستون اضافه کنید به نام ، اسم صفحه( مثلا PageName)
بعد با این کد

string PageName = System.IO.Path.GetFileName(Request.Path);


اسم صفحه جاری رو در بیارید
بعد با یک select ساده اسم ماژول رو از جدول tbl_modules در بیارید

select Modulename from tbl_modules where PageName=@PageName

bftarane
یک شنبه 07 آبان 1391, 12:20 عصر
معذرت مي خوام. آدرس رو درست کردم.
http://how2learnasp.net/article.aspx?code=85c9dd50-0935-48c2-9039-949da6b42f8d

کد اولي که نوشتيد در اون مقاله استفاده شده و منتها مسئله من اينه که فقط يه صفحه دارم در واقع آدرس صفحه مشخصه و من بايد يه جوري اسم يوزرکنترل رو بر اساس نقش پيدا کنم حالا موندم به جاي اون کد از چي بايد استفاده کنم.

براي اينکه واضح تر باشه قضيه عکس جداول نقشها و ماژول ها رو قرار مي دم
94401
94402
و کدهاي زير رو در مسترپيج نوشتم
حالا موندم به جاي اون خط که به صورت توضيح درآوردم چي بنويسم؟

string CS = ConfigurationManager.ConnectionStrings["Con"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//string ModuleName = System.IO.Path.GetFileName(Request.Path);
string ModuleName = "Admin";
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("GetRolesByModule", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ModuleName", ModuleName);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
if (Page.User.Identity.IsAuthenticated)
{
if (!Page.User.IsInRole(dr["ModuleRole"].ToString()))
{
Response.Redirect("MsgPage.aspx");
}
}
else
{
FormsAuthentication.RedirectToLoginPage();
}
}
con.Close();
}
}
}
يعني در اين کد که در بالا مي بينيد
string ModuleName = "Admin";
من دستي اومدم نقش رو وارد کردم حالا به جاش چي بنويسم؟

Mag-Mag
یک شنبه 07 آبان 1391, 13:13 عصر
شما اون اول که کاربر لاگین می کنه نقشش رو در یک کوکی یا سشن دخیره کنید
بعد اینجا مقدار شو از همون سشن یا کوکی بخونید
؟

mehrzad_ali
یک شنبه 07 آبان 1391, 21:52 عصر
نقل قول: لود ماژول بر اساس نقش

bftarane
شنبه 04 آذر 1391, 19:08 عصر
واي اين جواب شما رو من يه خورده پيش ديدم.
1. ميشه براي ModuleSrc، ModuleSrcMange يه مثال بزنيد که معلوم بشه اينا چي هستن؟
2. فرق ModuleTitle با ModuleName چيه؟
3. آيا منظورتون از جدول pages همون جدول آيتمهاي منو هستش؟

اگه لطف کنيد يه عکس از حالتي که داده پر شده تو اين جداول بزارين ممنون ميشم.

شايد کاربر گرامي mehrzad_ali ديگه به اين تاپيک سر نزنن. لطفاً هر کسي جواب اين سوالا رو ميدونه راهنمايي کنه. ممنون.