PDA

View Full Version : چگونگی تعیین سطح دسترسی به کاربران



i3ooter
جمعه 08 شهریور 1392, 06:46 صبح
با سلام و خسته نباشید ؛

دوستان بنده آموزش "تعیین سطح دسترسی به کاربران" رو میخواستم

یه برنامه دارم که دارای بانک اطلاعاتی اکسس هست و میخوام برای ورود به نرم افزار گروهی رو تعریف کنم که هرکدوم یه کاری رو انجام بده

مثال: مدیر بتونه ثبت، ویرایش، حذف و ... انجام بده

کاربر عادی بتونه فقط ببینه و کاری دیگه نتونه انجام بده

ممنون میشم آموزش رو به صورت کامل و گام به گام بهم نشون بدین ( اگه تصویری هم باشه چه بهتر )

ممنون و سپاس از لطف شما دوستان عزیز

vbhamed
جمعه 08 شهریور 1392, 09:46 صبح
سلام
به سايت خوش اومدين
شما بايد خودتون كار رو شروع كنيد و اگر مشكل داشتيد بچه ها راهنمايي مي‌كنن
براي شروع و ايده اين كار مي‌تونيد يك جدول در بانك درست كنيد و حق دسترسي قسمتهاي مختلف برنامه رو در ركوردهاي جداگانه ثبت كنيد و موقع اجراي اون قسمت ابتدا حق دسترسي رو بررسي كنيد
براي دسترسي هاي از قبيل ثبت، ويرايش، حذف و .. هم مي‌تونيد فيلدهايي به همين نام در ركورد نظر بگيريد
قسمتهاي مختلف برنامه رو مي‌تونيد با يك فيلد شماره يا نام اون قسمت در ركورد مربوطه جدا كنيد همچنين آيدي كاربر به عنوان فيلدي ديگه درون اين ركورد قرار مي‌گيره
براي همه كاربران هم ركوردها رو جداگانه ثبت كنيد

البته در سطح بالاتر بايد ركوردها رو انكريپت شده ذخيره كنيد و از Checksum هم استفاده كنيد تا شخصي از بيرون برنامه نتونه ركورد رو تغيير بده يا كپي كنه

اين يك نمونه از شماي جدول

User Section Add Edit Delete
-----------------------------------------------------------
1 Factor 1 1 1
2 Kala 0 1 0
3 Report 1 0 0

i3ooter
جمعه 08 شهریور 1392, 12:09 عصر
با تشکر از شما

شاید خنده دار باشه ولی خب، بنده اینگونه متوجه نمیشم

اگه بشه به صورت تصویری یا متنی به صورت کامل بهم بگید ممنون میشم

مثلا اول توی دیتابیس چه فیلدهایی ایجاد کنیم از کجا تعیین سطح دسترسی کنیم

توی وی بی از چه کدی استفاده کنیم

عضرخواهی میکنم و مجدد تشکر بابت زحمات شما

Mr'Jamshidy
جمعه 08 شهریور 1392, 15:52 عصر
اگر بلدی با دیتابیس کار کنی، کارهای بانک اطلاعاتی با خودت

این هم نمونه کد تا جایی که تونستم ساده و قابل فهم درستش کردم

Dim Permissions As Long

Const Perm_Create = 1
Const Perm_Delete = 2
Const Perm_Edit = 4

Private Sub cmdCreate_Click()
If Not CBool(Permissions And Perm_Create) Then GoTo AccD

'....
' Codes Here
'....

Exit Sub
AccD:
MsgBox "Access Denied!", vbCritical
End Sub

Private Sub cmdDelete_Click()
If Not CBool(Permissions And Perm_Delete) Then GoTo AccD

'....
' Codes Here
'....

Exit Sub
AccD:
MsgBox "Access Denied!", vbCritical
End Sub

Private Sub cmdEdit_Click()
If Not CBool(Permissions And Perm_Edit) Then GoTo AccD

'....
' Codes Here
'....

Exit Sub
AccD:
MsgBox "Access Denied!", vbCritical
End Sub

Private Sub Form_Load()
Permissions = Perm_Create Or Perm_Delete
End Sub

m.4.r.m
شنبه 09 شهریور 1392, 11:08 صبح
سطح دسترسی معمولا در زمان لاگین شدن به برنامه اتفاق می افته شما وقتی با یوزر و پسورد وارد برنامه میشین باید دسترسی ها رو چک کنین حامد جان بالا اشاره کردن با یک تصویر ساده ، شما میای یک ماژول درست می کنی و و نسبت به دسترسی ها و فیلد هاش متغیر تعریف می کنی و نوع متغیر ها رو هم از نوع فیلد های دیتابیس تعریف می کنی مثلا این طوری
Public Admin As Boolean

زمان بررسی شرط ورود به برنامه که نام کاربری و کلمه عبور رو چک می کنید میای به متغیر ها مقدار فیلد های دیتابیس رو نسبت میدی مثلا اگر در دیتابیس مقدار Admin برابر True باشه میای به متغیر Admin که در ماژول ایجاد کردی برابر True میدی اینطوری :
Admin = Adodc1.RecordSet.Fields("Admin")
در این صورت اگر مقدار فیلد Admin در دیتابیس True باشه متغیر Admin هم True میشه و ....

روش بررسی دسترسی هم اینطوری هستش که شما قبل از ورود به فرم تنظیمات می خوای چک کنی طرف می تونه وارد بشه یا نه یه شرط ساده می زاری اینطوری
If Admin = True Then
Frm_Setting.Show
Else
Msgbox "شما مجوز ورود به این بخش را ندارید"
End If

چون شما متغیر Admin رو در ماژول به صورت Public تعریف کردی پس همه جای برنامه می تونی ازش استفاده کنی . به همین راحتی .

vbhamed
شنبه 09 شهریور 1392, 11:24 صبح
اگه بشه به صورت تصویری یا متنی به صورت کامل بهم بگید ممنون میشم، مثلا اول توی دیتابیس چه فیلدهایی ایجاد کنیم


سلام
جوابي كه دادم هم تقريبا تصويري بود
اون جدول بالا جدولي هست كه در بانكتون ايجاد مي‌كنيد و فيلدهاي User, Section, Add, Edit, Delete داره و زيرش هم 3 سطر نمونه اطلاعات وارد شده
كار كردن با جدول شامل نوشتن ركورد و خوندن و چك كردن فيلدها كدهاي وي بي مربوطه ديگه ميشه روش كار با ديتابيس كه بايد از كتابها و منابع بانك اطلاعاتي ياد بگيريد و البته خيلي هم راحته

VG1234
یک شنبه 10 شهریور 1392, 15:10 عصر
بسمه تعالی
=============
با سلام و خسته نباشید خدمت شما .
من براتون یک سورس نمونه نوشتم ، ببینید به کارتون میاد .

دانلود سورس (http://uploadtak.com/images/c588_permisioninprogram.rar)

با تشکر

nazanin_90
جمعه 06 دی 1392, 19:16 عصر
سلام

البته در سطح بالاتر بايد ركوردها رو انكريپت شده ذخيره كنيد و از Checksum هم استفاده كنيد تا شخصي از بيرون برنامه نتونه ركورد رو تغيير بده يا كپي كنه

اين يك نمونه از شماي جدول

User Section Add Edit Delete
-----------------------------------------------------------
1 Factor 1 1 1
2 Kala 0 1 0
3 Report 1 0 0
با سلام
فرض می کنیم بانک اطلاعاتی برنامه اکسس باشد و متأسفانه بانک اکسس برای همه کاربران با هر سطح دسترسی باید در حالت فول شیر (full share)باشد .
با این فرض و وجود این ایراد بزرگ بانک اکسس :
فرض کنید برای من کاربر سطح دسترسی در بعضی از قسمت های برنامه محدود شده و از طرفی به جدول سطح دسترسی کاربران نیز دسترسی دارم و میخواهم سطح دسترسی خودم را تغییر بدهم و بدیهی است که سطح دسترسی مدیر یا admin نیز در این جدول تعریف شده ولی از آنجائیکه که رکوردها انكريپت شده دقیقاً نمیدانم کدام رکوردها مربوط به سطح دسترسی مدیر است ؛ ولی وقتی به فیلدهای ستون add Edit Delete نگاه میکنم می بینم برای بعضی از رکورد ها علامت یا حرفی تکرار شده و حدس می زنم که احتمالاً این علامت ها مربوط به رکورد های مدیر یا شخصی است که دارای سطح دسترسی کاملی است و از آنجائیکه میدانم با توجه به تک رقم بودن اعداد 1 و 0 نتیجه انكريپت آنها نیز یک حرف یا علامت خواهد بود بر اساس همین احتمال آن علامت یا حرف فوق را کپی و جایگزین دیگر علامتها می کنم . و همین کار را بر حسب آزمون و خطا انجام میدهم تا به نتیجه برسم .
البته قبلاً از بانک یک کپی تهیه می کنم که اگر موفق نشدم همان بانک را مجدداً جایگزین نمایم
باید عرض کنم بنده تا کنون به چنین موردی بر نخورده ام و صرفاً این موضوع به صورت یک تصور در ذهنم نقش بست .
لذا از اساتید تقاضا دارم راهنمائی بفرمایند که آیا این تصور بنده اصلاً درست است و اگر درست است چه راهکاری برای جلوگیری از این کار باید بعمل بیاید ( البته با این فرض که بانک برنامه اکسس است نه اسکیوال)
با تشکر

m.4.r.m
جمعه 06 دی 1392, 22:35 عصر
خوب شما با این کاری که گفتین پی می برین که کدم قسمت مربوط به مدیر یا کاربر عادی هست پس مشکلتون چی هست ؟ می خواین کار خاصی دیگه ای انجام بدین ؟

vbhamed
شنبه 07 دی 1392, 11:24 صبح
سلام
اين پاسخ ها براي نمايش نحوه كلي كاره
در حالت واقعي براي اينكه نشه دسترسي ها رو تغيير داد مي‌تونيد كل مجوزهاي هر ركورد يا هر كاربر رو در يك رشته متني ذخيره كنيد و رشته رو هم انكريپت كنيد در اين صورت چون هر رشته شامل مجوز دسترسي به مثلا 30 قسمت برنامه هست (يك رشته 30 كاراكتري) از انكريپت شده اون نميشه فهميد چي به چيه البته انكريپت بايد به صورتي باشه كه دقيقا نياد حرف به حرف انكريپت كنه بلكه به كل رشته هم وابسته باشه ضمنا براي جلوگيري از تغيير رشته انكريپت شده مي‌تونيد يك هش MD5 يا Checksum هم براش در نظر بگيريد
ضمنا در جدول كاربران يك فيلد AutoNumber هم در نظر بگيريد و در موقع انكريپت كردن، حتما مقدار اون فيلد رو در الگوريتم انكريپت دخالت بديد تا كاربر نتونه كل رشته رو از يك ركورد به ركورد ديگه كپي كنه

m.4.r.m
شنبه 07 دی 1392, 14:08 عصر
اگه شما از اکسس 2010 استفاده کنی و یک رمز به پایگاه داده بدی چون رمزش کد شده و Encrypt میشه به صورت امنیت خیلی بالا کاربر اصلا نمی تونه پایگاه داده رو باز کنه . روش دیگه ای هم اینه که میتونی به قول دوستم حامد از MD5 یا Sha1 و... استفاده کنی اونم اینکه خودش رو تو یه جدول دیگه بنویسی یه جدول کد داشته باشی مثلا Add رو کد کنی تو یک جدول موقعی که میای تو جدول دسترسی ازش استفاده کنی دوباره به صورت کد شده ازش استفاده کنی یعنی میشه کدینگ در کدینگ اینطوری درصد حدس تقریبا صفر میشه .