PDA

View Full Version : آموزش: آموزش ایجاد منو از دیتابیس با آیتمهای محدود سازی



mehran_337
دوشنبه 09 اسفند 1389, 11:37 صبح
مدتی بود دنبال این موضوع می گشتم که چطور می شه اطلاعات منو را بجای XML از دیتابیس بخونه و بجای اینکه از Role برای محدود کردن کاربران استفاده بشه بتونم منو را محدود کنم یعنی آیتم هایی که کاربر نباید دسترسی داشته باشه اصلا در منو وجود نداشته باشه در حالیکه مدیر به همه گزینه های منو دسترسی داره.

خب برای این کار اول باید جداول مورد نیاز رو تعریف کنیم :

- Categories : این تیبل آیتم های اصلی منو را ذخیره خواهد کرد شامل فیلد CategoryName که از نوع رشته و عنوان منو را نگهداری خواهد کرد و فیلد CategoryID که از نوع عدد باشه . بعنوان مثال تیبل فوق را به این صورت پر کنید :
CategoryName CategoryID
-----------------------------------------
Home 1
Edit 2
Tools 3

CatSubMenu : این تیبل زیر منو هارا نگهداری خواهد نمود و شامل فیلد CategoryID که مانند تیبل قبلی است مثلا اگر آیتمی باید زیر منوی Tools باشد این مقدار با عدد 3 مقدار دهی خواهد شد. فیلد ProductName هم رشته ای است که عناوین زیر منو را در خود ذخیره خواهد کرد. فیلد Curl هم برای اینکه مشخص کنید پس از کلیک این آیتم به کدام صفحه وارد شود.در این تیبل می توانید فیلد UserID هم داشته باشید که بعدا تعیین خواهد نمود هر کاربر به کدام گزینه ها دسترسی خواهد داشت . یعنی فرمی درست کنید که فیلد ProductName لیست شود و مدیر هر کدام را که خواست برای کاربر مورد نظر تیک بزند و کد آن کاربر را در فیلد UserID ذخیره خواهد نمود.
مثلا :

UserID ProductName CategoryID
-----------------------------------------
1 EditSubmenu1 1
1 EditSubmenu2 1
1 ToolsSubmenu1 1
1 ToolsSubmenu2 2
1 ToolsSubmenu3 2

حالا مثلا کاربر شماره 2 می خواهید بعضی منو ها را دسترسی نداشته باشد . در همین تیبل :
-----------------------------
1 2EditSubmenu1
2 ToolsSubmenu1 1
2 ToolsSubmenu2 2

تیبل ما آماده است . می پردازیم به کد برنامه :


protected void Page_Load(object sender, EventArgs e)
{


if (!IsPostBack)
PopulateMenu();
}

public void PopulateMenu()
{

DataSet dst = GetMenuData();
foreach (DataRow masterRow in
dst.Tables["Categories"].Rows)
{
MenuItem masterItem = new
MenuItem((string)masterRow["CategoryName"]);
Menu2.Items.Add(masterItem);

masterItem.NavigateUrl = "";

foreach (DataRow childRow in
masterRow.GetChildRows("Children"))
{
MenuItem childItem = new
MenuItem((string)childRow["ProductName"]);
masterItem.ChildItems.Add(childItem);
childItem.NavigateUrl = (string)childRow["curl"];


}
}
}

DataSet GetMenuData()
{
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionSt rings["ConnectionString"].ConnectionString);
SqlDataAdapter dadCats = new SqlDataAdapter("SELECT * FROM Categories", con);
string strSel ;
if (lblUser.Text.Trim()=="مدیر")
strSel = "SELECT * FROM CatSubMenu where modirID is null";
else
strSel = "SELECT * FROM CatSubMenu where modirID=" + Session["IDUser"].ToString();


SqlDataAdapter dadProducts = new SqlDataAdapter(strSel, con);

DataSet dst = new DataSet();
dadCats.Fill(dst, "Categories");
dadProducts.Fill(dst, "CatSubMenu");
dst.Relations.Add("Children",
dst.Tables["Categories"].Columns["CategoryID"],
dst.Tables["CatSubMenu"].Columns["CategoryID"]);
return dst;
}



من در برنامه ام یا یک کوئری شخص ورود کننده را تشخصیص دادم و نام کاربر را در یک میبل درج می کنم و از آن طریق می فهمم که آیا مدیر وارد شده یا نه.
شخص ورود کننده پس از وارد کردن یوزر و پسوورد ID ورود کننده در یک سشن ثبت شده که در بخش Session["IDUser"] به آن اشاره شده است.
امید وارم مورد استفاده تون قرار گرفته باشه.
خوشحال می شم از نظرات دوستان هم استفاده بشه.
یا حق

zareei_ta
سه شنبه 18 مرداد 1390, 10:27 صبح
من این کد را نوشتم زمانی بر روی زیر گروه کلیک میکنم خطای زیر را می دهد

Conversion failed when converting the nvarchar value 'کشاورزی' to data type int.

amirjalili
سه شنبه 18 مرداد 1390, 12:18 عصر
البته به طور کلی درست اینه که
1: شما از پروسیجر به جای نوشتن کوئری استفاده کنید.
2: اطلاعات منو رو با توجه به شخص وارد شونده به صورت ایکس ام ال از دیتابیس دریافت کنید و در منو نشون بدید.
3: کدهاتون باید تمیز تر از این باشه چون یه فیلد اگر تغییر کنه تقریبا بیش از نصف کد های شما باید تغییر کنه.

safa.net
چهارشنبه 19 مرداد 1390, 00:42 صبح
سلام دوست عزیز اگه میشه سورسش رو هم ارائه کنید تا راحتتر بشه کارکرد
ممنون

armin.poshtiban
دوشنبه 04 اسفند 1393, 17:39 عصر
با سلام و خسته نباشید به همه دوستان
میشه بیشتر توضیح بدین و یک مثال هم بزارین؟
ممنون میشم

korosh00
چهارشنبه 06 اسفند 1393, 10:31 صبح
دوست گرامی میشه نمونه رو قرار بدید؟
متشکر