PDA

View Full Version : سوال: ایجاد سطح دسترسی



Mansoor92
شنبه 07 دی 1392, 18:24 عصر
سلام دوستان

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

میشه یک جدول توی دیتابیس گذاشت تا چک کنه ببنیه مدیر چه سطح دستری به کاربرش میده یا نه؟؟

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

ممنون میشم راهنماییم کنید

یاعلی

erfan_urchin
شنبه 07 دی 1392, 18:51 عصر
سلام
من بهترین روشی که به ذهنم رسید و از این روش تو برنامه انبارداری خودم استفاده کردم این بود که شما یک قسمت بزاری (مثل عکس زیر) بعد یه جدول تو دیتابیس درست کنی که هر کاربر فیلد های زیر رو داشته باشه
مثلا تو برنامه ای که من درست کرده بودم این فیلد ها مورد نیاز بود: id,username , password , darj , hazf , virayesh, mojudi anbar و غیره یعنی به ازای هر قسمت یه فیلد بزاری و وقتی مدیر خواست کاربر جدید بسازه هر کدومو تیک زد برای اون فیلد بنویسه TRUE و اگه تیک نزد واسه اون فیلد بنویسه FALSE
بعد به محض این که کاربر خواست وارد اون بخش بشه چک کنه که اون بخش برای کاربر TRUE هستش یا FALSE

Mansoor92
شنبه 07 دی 1392, 19:00 عصر
ممنونم از اینکه پاسخ دادید

ببینید توی نرم افزار من فقط یک مدیر و یک کاربر هست چطور میتونم چک کنم که مثلا اگر مدیر تیک گزینه فاکتور رو زد اونوقت کاربر به اون دسترسی داشته باشه؟چه کوئری بنویسم؟

ممنونم ازتون

erfan_urchin
شنبه 07 دی 1392, 19:16 عصر
به نظر من بهترین راه اینه که یه آرایه از نوع string درست کنی و به محض این که کاربر مورد نظر login شد کل سطح دسترسی رو بریزی تو اون آرایه
یه چی مثل کد زیر
string[] s =new string[8];
SQLDataAdapter sd=new SQLDataAdapter("select * from UserTable where username ='ali' and password='123456'")
DataTable dt=new DataTable();
sd.Fill(dt);
for(int i=3;i<11;i++)
s[i - 3] = dt.Rows[0][i].ToString();
توضیح در مورد 2خط آخر: بعد این که datatable پر شد شما باید اطلاعاتی که مربوط به سطح دسترسی هست رو داخل آرایه بریزی ، با فرض این که فیلد صفرم id فیلد اول username فیلد دوم password هستش من اومدم از فیلد سوم گفتم اطلاعات رو بریزه داخل آرایه
حالا وقتی کاربر اومد کلیک کنه روی هر گزینه باید یه کاری مثل کار زیر انجام بشه
private void btndarj_Click(object sender, EventArgs e)
{
if (s[0] == "false")
{
FarsiMessageBox.Show("شما مجوز دسترسی به این بخش را ندارید", "", PardisSoft.Components.MessageBoxButtons.OK, PardisSoft.Components.MessageBoxIcon.Error);
}
else
{
formdarj fd = new formdarj();
fd.ShowDialog();
}
}
اگه توضیحات کافی نیست بگید تا بیشتر توضیح بدم

Iran58
یک شنبه 04 خرداد 1393, 10:42 صبح
سلام
ببخشید
سطح دسترسی در سی شارپ
مشکل اساسی من این است که می خواهم سطح دسترسی در سه تا جدول باشند نه یک جدول چون سطح دسترسی ها زیاد است

یک جدول که برای ثبت کاربران بهمراه نام کاربری و کلمه عبور است
جدول دوم که اسامی فرمها است
جدول سوم ارتباط جدول اول و دوم
تااینجا کار را راحت انجام می دهم ارتباط ها را برقرار می کنم امادر صفحه اصلی برنامه نمی دونم چطوری کد بنویسم که هر کاربری هنگام لاگین فقط به صفحات مربوطه دسترسی داشته باشند
(یعنی هر کاربر لاگین شد نام کاربری که در جدول سوم با فرمها ست شده است ,فرمهای مورد نظر برایش باز شود)
در سایت فقط در سطح ادمین وغیر ادمین است که در یک جدول تعریف شده است که برای تعداد فرمهای بالا پاسخگو نیست
خواهش می کنم که یک نمونه قرار دهید
باسپاس

ASKaffash
دوشنبه 12 خرداد 1393, 07:13 صبح
...........
ایجاد سطح دسترسی برای فرم ها و کنترلها (http://barnamenevis.org/showthread.php?518422-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D8%B3%D8%B7%D8%AD-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%81%D8%B1%D9%85-%D9%87%D8%A7-%D9%88-%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D9%87%D8%A7)

behi1ty
دوشنبه 12 خرداد 1393, 08:37 صبح
باسلام
دوستان جواب سوال شما را داده اند بنده هم يك راه حل ديگه خدمتتان مي گويم
اين راهي كه مي گم براي پروژه هاي متوسط و نيمچه بزرگ هست
براي اينكار شما بايد 4 تا جدول در ديتابيس داشته باشيد به اينصورت :
1- كنترل ها (با حداقل 3 فيلد)
2-جدول گروه كاربري(حداقل 2فيلد)
3-جدول كاربران با حداقل(4 فيلد)
4-جدول تعيين دسترسي (حداقل 3فيلد)


ببين روش كاري كه من دارم مي گم اينه كه شما دسترسي مي دي به يك گروه كاربري كاربر و ميدي به گروه كه مي توني گروه كاربري و حذف كني
شما فرض كن 10تا دكمه(يا فرم يا ....) داري كه مي خواي دسترسي بدي تو جدول كنترل ها ستون هات به اين طريقه كه يك شماره ID...Name....Text به اين طريق شما كنترل هايي كه مي خواي باهاش سطح دسترسي بدي و تعريف مي كني
بعد يه گروه كاربري تعريف مي كني كه شامل تو فيلد id...name باشه
جدول كاربران هم كه مي شه Id...username....password...IdGroup شماره گروه كاربري اينجا مي خوره
جدول رابط هم به اين ترتيب هست idControl...idGroup...value كه اينجا بهتره value از نوع bit باشه
اين جداولمون حالا در C#
براي اين قسمت يه مثال مي زنم
button1.Visible=Permision.GetValues(button1.Name,I dGroup)
اينجا نام permision نام كلاسمون هست و Getvalue هم تابع اون كلاسه پارامتر هايي كه بهش پاس مي ديم نام همون كنترل + شماره سريال گروه كاربري كه لاگين كرده
دستور Select هم به اين صورت هست
select value from tblControl_Group
where idcontrol in (
select id from tblControl
where name=@name)
and idGroup=@idgroup
هرجايي و هم كه متوجه نشدي بگو تا كاملش كنم

gjmkdyttyhujk
سه شنبه 13 خرداد 1393, 16:31 عصر
در تعیین سطح دسترسی شما برای هر کاربرت یک فیلد سطح دسترسی تعیین می کنید. مثلا علی سطح 1.رضا سطح 2.محسن سطح 3 والی آخر. بعد در هنگام لاگین کردن کاربر دیتای موجود در فیلد سطح دسترسی اون رو از پایگاه بر میدارید واونو توی یک متغییر سراسری در برنامه تون نگه داری میکنید و توی هر کدوم از فرم هاتون اگه نیاز به سطح دسترسی باشه میگید که " اگه مقدار متغییر سراسری مثلا 1 بود فلان قسمت ها براش فعال بشه یا غیر فعال بشه.تمام.

Iran58
شنبه 17 خرداد 1393, 10:36 صبح
سلام
مهندس جان کد های این قسمت به linq چه می شود
namespace UA
{
internal static class Public
{
internal static ushort UserID = 2;
internal static bool ItemVisible = false;
internal static string ConnectionString = @"Data Source=WKS25;Initial Catalog=UA;Integrated Security=True";
//@"Data Source=.\SQL2008;Initial Catalog=UA;Integrated Security=True";
}
internal class Methods
{
internal static T Val<T>(object Number)
{
object obj = 0m;
if (Number != null)
obj = Convert.ToDecimal(Number);
return (T)Convert.ChangeType(obj, typeof(T));
}
internal static DataTable GetFormAccess(byte CS_FormID)
{
DataTable DT = new DataTable();
SqlConnection Con = new SqlConnection(Public.ConnectionString);
new SqlDataAdapter("GetFormAccess " + Public.UserID + "," + CS_FormID, Con).Fill(DT);
return DT;
}
}
}

ASKaffash
شنبه 17 خرداد 1393, 12:56 عصر
سلام
GetFormAccess یک SP است چرا می خواهید به LINQ باشد ؟

sadegh_123
دوشنبه 19 خرداد 1393, 22:53 عصر
سلام
من بهترین روشی که به ذهنم رسید و از این روش تو برنامه انبارداری خودم استفاده کردم این بود که شما یک قسمت بزاری (مثل عکس زیر) بعد یه جدول تو دیتابیس درست کنی که هر کاربر فیلد های زیر رو داشته باشه
مثلا تو برنامه ای که من درست کرده بودم این فیلد ها مورد نیاز بود: id,username , password , darj , hazf , virayesh, mojudi anbar و غیره یعنی به ازای هر قسمت یه فیلد بزاری و وقتی مدیر خواست کاربر جدید بسازه هر کدومو تیک زد برای اون فیلد بنویسه TRUE و اگه تیک نزد واسه اون فیلد بنویسه FALSE
بعد به محض این که کاربر خواست وارد اون بخش بشه چک کنه که اون بخش برای کاربر TRUE هستش یا FALSE
میشه لطفا کد این سطح دسترسی رو اینچا قرار بدید /
خیلی ممنون

niloo69
چهارشنبه 23 اردیبهشت 1394, 19:49 عصر
میشه لطفاً اسکریپت پایگاه داده رو بزاری؟ :لبخندساده: