PDA

View Full Version : نحوه دسترسی دادن به کاربران نرم افزار



mahdad sepah
شنبه 25 تیر 1390, 16:24 عصر
با عزض سلام خدمت اساتید عزیز:
من در نرم افزارم قصد دارم به کاربران برنامه دسترسی های مختلف بدم که فلان کاربر بتواند یک سری فرم را ببیند یا نبیند!من با linq دارم کار میکنم در حال حاضر نیز دو جدول برای این کار ساخته ام یکی برای یوزر و پسورد و دیگری انواع دسترسی ها.
بسیار بسیار ممنون میشم اگر کمکم کنید

vof.ir
شنبه 25 تیر 1390, 16:39 عصر
سلام
خب الان دقیقا مشکل شما چیه؟
بسته به اینکه چه الگوریتمی استفاده می کنید خب فرق داره
الان مشکل شما در طراحی الگوریتمش هست یا پیاده سازی
معمولا یک جدول نقش میگذارند
یک جدول کاربر
و یک جدول نقش-کاربر
حالا بر اساس اینکه چه کاربری چه نقشی داره کدت را بنویس
مثلا توی سازنده فرمت
برخی کنترل ها را غیر فعال و غیر قابل دیدن کن

mahdad sepah
شنبه 25 تیر 1390, 16:46 عصر
بیشتر در پیاده سازیش مشکل دارم
1-این که چه جوری دو تا جدول را به هم ربط بدم
2-وقتی این کار را انجام دادم مثلا وقتی کاربر وارد شد نرم افزار چه جوری تشخیص بده که چه دسترسی دارد که آن را اعمال کند
ممنون میشم راهنماییم کنید

mahdad sepah
شنبه 25 تیر 1390, 17:21 عصر
بیشتر در پیاده سازیش مشکل دارم
1-این که چه جوری دو تا جدول را به هم ربط بدم
2-وقتی این کار را انجام دادم مثلا وقتی کاربر وارد شد نرم افزار چه جوری تشخیص بده که چه دسترسی دارد که آن را اعمال کند
ممنون میشم راهنماییم کنید

ya30ien2
شنبه 25 تیر 1390, 17:39 عصر
دوست عزیز اینجور که من توجه شدم
اصلا نیازی نیست که شما دوتا جدول رو به هم ربط بدید
میتونید مثلا وقتی کاربر نام کاربری و رمز عبور رو تایپ کرد از همونجا دستور بدید که نام کاربری وارد شده رو در صفحه اصلی مثلا در یک label نمایش بده و در کد رویداد load همون صفحه تعریف کنی که دسترسی برابر باشه با جدول دوم به شرط اینکه نام کاربریش برابر با label باشه و داخل همون صفحه چندتا مثلا checkbox تعریف کنی و بگی اگه مثلا اطلاعات دریافتی که برابر با label هست برابر با true این گزینه هم true و در غیر این صورت برابر با false و تعریف کنی که اگر checkbox.cheched=true; اونوقت صفحه دوم قابل دسترس
به همین راحتی
البته اگه همینجوری باشه که من فهمیده باشم

mahdad sepah
شنبه 25 تیر 1390, 18:49 عصر
تقریبا درست متوجه شدید ولی من مشکلم اینه که مثلا به علی یک دسترسی خاص دادم ودر بانک ذخیره شده چه جوری نرم افزار از بانک دسترسی هر کاربر را به صورت مجزا اعمال کنه؟
من در یک label اسم کاربر را قرار می دم حالا اینکه دسترسی هایی که ذخیره کردم چه جوری فراخوانی بشه اینو نمیتونم:ناراحت:

juza66
شنبه 25 تیر 1390, 19:11 عصر
سلام دوست من

همانطور که دوست خوبمون آقا/خانم ya30ien2 (http://barnamenevis.org/member.php?210845-ya30ien2) فرمودن نیازی نیست جداول رو به هم ربط بدید

ببنید مثلاً:

Ali: ایجاد - ویرایش - حذف
Hasan: ایجاد ندارد - ویرایش ندارد - حذف ندارد

هرکدام از گزینه که امکان دسترسی دارند رو مقدار 1 بده و هر کدام ندارند 0


خوب توی دیتابیس فیلد ها اینجور تعریف میکنی:
نام - ایجاد - ویرایش - حذف

حالا در هنگام اجرای برنامه میذاری فیلد ها رو چک کنه :متفکر:

اگه کاربر Ali و پسوردش رو وارد کرد میذاری فیلدهای دسترسی رو چک کنه
مثل اگر امکان ایجاد کردن رو داره دکمه ایجاد true بشه

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

اگه نیاز به کمک داشتی بگو تا مثال برات بذارم ، موفق باشی

mahdad sepah
یک شنبه 26 تیر 1390, 00:04 صبح
آقا واقعا دمت گرم اگه یه مثال کوچولو بذاری که دیگه سنگ تموم گذاشتی چون من باید تا پس فردا تحویل بدم واقعا ممنونم ازتون

system32
یک شنبه 26 تیر 1390, 10:12 صبح
مثال:

فرض کنید که تو برنامم یه منو دارم که این منو از چندین آیتم تشکیل شده حالا می یام و تمامی آیتم ها را غیر فعال می کنم. حالا تو صفحه مدیریت به مدیر می گم سطح دسترسی هر کاربر را به این آیتم ها را مشخص کن مدیر با تیک زدن یا نزدن سطوح دسترسی این کار را انجام می ده حالا شما می یاید با توجه به این تیک ها مقدار صفر یا یک رو تو جدول دیتابیستون ذخیره می کنید. البته نیازی نیست که بگم ترتیبشون مهمه. حالا وقتی برنامه شما می یاد لود بشه این رشته باینری (صفر و یک) رو از جدول واکشی کرده توی یک آرایه می ریزید و با توجه به مقدار هر عنصر آرایه اگه صفر بود آیتم همچنان غیر فعال باشه و اگه یک بود فعال بشه.

mahdad sepah
یک شنبه 26 تیر 1390, 11:19 صبح
دوست عزیز هیچ نمونه کدی ندارید؟چون این روش ها را بخواهم آنالیز کنم تبدیل کنم به کد خیلی زمان میگیره(به خاطر غیر حرفه ای بودنم) ممنونتون میشم اگه یک نمونه کد بگذارید:قلب:

mahdad sepah
یک شنبه 26 تیر 1390, 14:58 عصر
دوستان خواهشا یه کمکی بکنید واقعا کارم گیره:ناراحت:

ya30ien2
یک شنبه 26 تیر 1390, 16:53 عصر
یک فایل میزارم ببین خوبه
http://www.jetup.ir/do.php?filename=17_07_1113109057201.rar
فکر نمیکنم سادهتر از این کسی داشته باشه
البته از لحاظ سادگی نه از نظر برنامه نویسی

ya30ien2
یک شنبه 26 تیر 1390, 16:54 عصر
یادم رفت بگم من با sql انجام دادم
اما فایل sql رو نزاشتم دیگه خودت باید مابقی رو انجام بدی

yeganehaym
سه شنبه 28 تیر 1390, 12:51 عصر
خب اگه درست متوجه شده باشم شما قصد دارید برای هر کاربری اجازه درسترسی یا عدم آن را برای نواحی مختلف برنامه بدهید برای این کار شما نیاز به دو جدول ندارید جدول زیر رو فرض کن
نام فیلدها : یوزر ، پسورد،ناحیه 1،ناحیه 2 و ناحیه 3 .....
حالا موقع تعریف دسترسی ها شما باید همون راه چک باکس رو بذاری تا مدیر تعیین سطح کنه و تو دیتابیس برای فیلدهای ناحیه مقدار دو ارزشی قائل بشی
چون این صحیح نیست که همواره برای چک کردن اجازه به دیتابیس مراجه کنی از یه ساختار مثل hash بسته به نوع طراحیت داره استفاده کن و هر موقع کاربر وارد اون ناحیه میشه از طریق اون مطلع شو اجازه داره یانه ، اگه نه اجازش نده و بندازش بیرون.

ya30ien2
سه شنبه 28 تیر 1390, 16:40 عصر
خب اگه درست متوجه شده باشم شما قصد دارید برای هر کاربری اجازه درسترسی یا عدم آن را برای نواحی مختلف برنامه بدهید برای این کار شما نیاز به دو جدول ندارید جدول زیر رو فرض کن
نام فیلدها : یوزر ، پسورد،ناحیه 1،ناحیه 2 و ناحیه 3 .....
حالا موقع تعریف دسترسی ها شما باید همون راه چک باکس رو بذاری تا مدیر تعیین سطح کنه و تو دیتابیس برای فیلدهای ناحیه مقدار دو ارزشی قائل بشی
چون این صحیح نیست که همواره برای چک کردن اجازه به دیتابیس مراجه کنی از یه ساختار مثل hash بسته به نوع طراحیت داره استفاده کن و هر موقع کاربر وارد اون ناحیه میشه از طریق اون مطلع شو اجازه داره یانه ، اگه نه اجازش نده و بندازش بیرون.
داداش میشه یک نمونه بزاری ما هم یه چیزی یاد بگیریم
ممنون

mahdad sepah
سه شنبه 28 تیر 1390, 17:39 عصر
خب اگه درست متوجه شده باشم شما قصد دارید برای هر کاربری اجازه درسترسی یا عدم آن را برای نواحی مختلف برنامه بدهید برای این کار شما نیاز به دو جدول ندارید جدول زیر رو فرض کن
نام فیلدها : یوزر ، پسورد،ناحیه 1،ناحیه 2 و ناحیه 3 .....
حالا موقع تعریف دسترسی ها شما باید همون راه چک باکس رو بذاری تا مدیر تعیین سطح کنه و تو دیتابیس برای فیلدهای ناحیه مقدار دو ارزشی قائل بشی
چون این صحیح نیست که همواره برای چک کردن اجازه به دیتابیس مراجه کنی از یه ساختار مثل hash بسته به نوع طراحیت داره استفاده کن و هر موقع کاربر وارد اون ناحیه میشه از طریق اون مطلع شو اجازه داره یانه ، اگه نه اجازش نده و بندازش بیرون.
خب میشه بیشتر توضیح بدین یا یک نمونه بگذارید؟

yeganehaym
سه شنبه 28 تیر 1390, 22:25 عصر
همونطور که گفتم ابتدا فیلد ها رو ایجاد و نحوه کد نویسی زیر رو دنبال کنین
در مرحله اول که get data توضیح زدم به دیتابیس متصل و ساختار جدول hash رو ایجاد می کنم نیاز به توضیح نیست که این ساختار باید از نوع public static باشه تا در تمام برنامه قابل استفاده بشه بعد از پر کردن این جدول هر جا نیاز به چک کردن مجوز بود قسمت دو کد که checking permissions توضیح زدم رو می نویسین و مقدار اون رو بر اساس کلید می گیرین و اگه false بود نتیجتا مجوزش نیست


using System.data.sqlclient;
using system.collection;





//get data
SqlConnection cn = new SqlConnection("constr");
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText = "select * from users";

cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
Hashtable htpermissions = new Hashtable();
while (dr.Read())
{
htpermissions.Add("area1",bool.Parse(dr["area1"].ToString()));
htpermissions.Add("area2", bool.Parse(dr["area2"].ToString()));
htpermissions.Add("area3", bool.Parse(dr["area3"].ToString()));

}
dr.Close();
cn.Close();

//checking permission

if (!bool.Parse(htpermissions["area1"].ToString()))
messagebox.show("Access Denied");




البته ساختار باید طوری باشه که حالت پویا داشته باشسه تا در آینده اگه نیاز به تعریف مجوز جدید رو داشت سریع با یهتغییر کوچیک همه چیز تغییر کنه ولی فعلا که شما نیاز به سرعت و احتمالا برنامه باید تک نسخه ای باشه و همچنین درک مطلب این کد مورد قبول خواهد بود

modern_amin
چهارشنبه 23 شهریور 1390, 12:22 عصر
دوستان کسی راهه بهتری که باعث شلخته شدن کدهایه برنامه نشه سراغ ندارند؟؟؟؟

azam2005
یک شنبه 17 اردیبهشت 1391, 18:06 عصر
با سلام
اگر بخواهید روی سطر های خاص هم مجوز دهید چکار می کنید؟
مثلا اگر بخواهید یک کاربر پس از ورود به سایت امکان ویرایش - مشاهده - حذف و ... رکوردهای خاصی را داشته باشد مثلا :

1-همه رکورد های یک جدول را
2- رکوردهایی که خودش ثبت کرده
3-رکوردهای که پرسنل ثبت کرده
4- رکوردهایی که همکار ثبت کرده و ...