PDA

View Full Version : سوال: چگونگي تعريف دسترسي براي گروه كاربري



Feremerz
چهارشنبه 06 آذر 1387, 14:01 عصر
سلام
من ميخوام يه سري دسترسي تعريف كنم واسه يه سري گروه كاربري

مثلا: من در گروه Administrator هستم و ميتونم Textbox داخل صفحه رو مشاهده كنم
اما كاربر Test كه در گروه Member عضو هست نميتونه اون Textbox رو ببينه

سوال اصلي من اينه كه ما با داشتن 3 جدول (كاربران ، گروه ها، دسترسي ها) كه جدول كاربران مدام در حال اضافه يا حذف ركورد هست همچنين جدول گروه ها ممكن است اضافه تغيير يا حذف داشته باشد اما جدول دسترسي ها جدولي با عناصر ثابت است و ما يه سري دسترسي از قبل تعريف ميكنيم و ديگه قابل تغيير هم نيستند
حالا ما بايد چطوري ارتباط بين اين جداول رو برقرار كنيم و براي تشخيص اين موضوع كه كاربر وارد شده به سايت در چه گروهيست و چه دسترسي هايي دارد بايد چه كار كنيم؟

در واقع بهترين راه چيه به نظرتون

ممنون

Saber_Fatholahi
پنج شنبه 07 آذر 1387, 00:40 صبح
توی cms هایی مثل yaf برای کنترل دسترسی از یه الگوی بیتی استفاده میکنه و اونو توی دیتابیس ذخیره میکنه
بعنی برای هر قسمت یه بیت در نظر میگیره که اگه دسترسی داشت عدد 1 و اگه نداشت عدد 0 آخر سر کل این بیتها در کنار هم به دهدهی تبدیل شده و توی دیتابیس ذخیره میشه من که این راه به ذهنم می رسه اساتید دیگه شاید راه بهتری بلد باشن

h.alizadeh
پنج شنبه 07 آذر 1387, 04:02 صبح
من اینجوری میکنم :

برای جدول گروه کاربری فیلد کلید میسازم (با نام مثلا userID) برای دسترسی ها هم فیلد کلید(با نام ممثلا MojavezId).

بعد در جدول گروه ها (فک کنم منظورتون اینه که کی چه مجوزهایی داره دیگه نه؟)
دو فیلد دارم یک کلیدهای اصلی اون دوجدول هست.(mojavezID,userId)

بعد دیگه به این رکورد ها رو اضافه میکنم و وقتی میخوام توی برنامه چک کنم فلانی به فلان لینک دسترسی داره یا نه چک میکنم آیا userId کاربرو آیدی این مجوز برای نمایش این لینکmojavezId با هم در یک رکورد از جدول دسترسی قرار دارند یا نه اگه آره که بعله نمایش اگه نه نمایش نده.

برای پرکردن در خوده جدول هم برای اونایی که مجوز دارند 1 نداشته باشند 0 میزارم.

نمونه ای از کد واسه چک کردن:



Sub bulidPage()
Dim auth As New ClassCheck()
If auth.usname IsNot Nothing Then
If auth.checkAuthorization(auth.usname, "AddArticle") <> 1 Then
Response.Redirect("~/articles.aspx")
End If
Else
Response.Redirect("~/articles.aspx")
End If
End Sub



بعد این تابع رو در page_load فراخوانی میکنم.

(روشم چطوره؟! خوبه؟)

m.hamidreza
پنج شنبه 07 آذر 1387, 23:19 عصر
در واقع بهترين راه چيه به نظرتون



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



(روشم چطوره؟! خوبه؟)

به نظر من اگه تو سناریوی کاری شما این الگوریتم جواب میده پس خوبه!
ولی اگه آی دی یه گروه کاربری 1005 باشه و آی دی یه مجوز 500 مثلا این گروه کاربری میتونی Edit انجام بده و آیدی یه گروه کاربری 500 باشه و آی دی یه مجوز 1005 و قابلیت Delete داشته باشن اونوقت الان دو تا رکورد یکسان در جدول شما درج میشه ولی مستقل از هم!

h.alizadeh
جمعه 08 آذر 1387, 04:15 صبح
ولی اگه آی دی یه گروه کاربری 1005 باشه و آی دی یه مجوز 500 مثلا این گروه کاربری میتونی Edit انجام بده و آیدی یه گروه کاربری 500 باشه و آی دی یه مجوز 1005 و قابلیت Delete داشته باشن اونوقت الان دو تا رکورد یکسان در جدول شما درج میشه ولی مستقل از هم!
ممنون،
منظورتون رونفهمیدم خوب درست!
اگه این حالت شما رو در نظر بگیرم دو رکورد یکسان تولید نمیشه! دوتا رکورد تولید میشه ولی یکسان که نیستند.
اولی:
userID=1005,mojavezID=500
دومین رکورد:
userID=500,mojavezID=1005


خب اینا دو رکورد مستقل هستند و نه مثل هم!

m.hamidreza
جمعه 08 آذر 1387, 09:42 صبح
ممنون،
منظورتون رونفهمیدم خوب درست!
اگه این حالت شما رو در نظر بگیرم دو رکورد یکسان تولید نمیشه! دوتا رکورد تولید میشه ولی یکسان که نیستند.
اولی:
userID=1005,mojavezID=500
دومین رکورد:
userID=500,mojavezID=1005


خب اینا دو رکورد مستقل هستند و نه مثل هم!

من گفتم شاید کلید اصلی این جدول رو ترکیب این دوتا فیلد در نظر گرفته باشی.
موفق باشید.

milade
جمعه 08 آذر 1387, 12:31 عصر
ببین عزی براد من گفته های استاد m.hamidreza رو نخوندم و نمی دونم به نتیجه رسیدید یا نه اما من این کار رو می کنم:
داخل جدول کاربرا یه فیلد برا دسترسی دارم و اونو هنگام ثبت نام مثلا x میدم خوب حالا هنگام لاگین کاربر اونو توی یه cache یا سشن میریزم و در هنگام لود صفحه دسترسی لازم رو میدم
حالا مشکل شما چیه؟

behnam_fagih
سه شنبه 26 آذر 1387, 11:30 صبح
سلام
به نظر من بهترین و راحت ترین روش اینه که جدول USER ایجاد کنید که فیلد عددی UserId رو داره و بقیه فیلدهای لازم که ما UserId رو لازم داریم
جدول Rule رو هم ایجاد کنید که اسم تمامی منوهاتون یا قسمتهای برنامتون توش نگهداری میشه که هر کدوم از این رکوردهای این جدول فیلدی به نام RuleId دارن
در انتها جدول RuleUser رو ایجاد کنید که فیلدهای زیر رو داره
Pk
RuleId(کلید خارجی از جدول Rule)
UserId(کلید خارجی از جدول User)
RuView(از نوع بیت)
RuInsert(از نوع بیت)
RuUpdate(از نوع بیت)
RuDelete(از نوع بیت)

تا اینجا مربوط به SQL server بود
حالا باید بقیه کارها رو از vb.net یا ... انجام بدین

مثلا توی Form_Load برید بر اساس UserId کاربری که وارد شده از جدول RuleUser مجوزهای کاربر رو بر اساس اینکه کدوم صفحه هست تشخیص بدین

web_user
سه شنبه 30 آبان 1391, 10:00 صبح
سلام
به نظر من بهترين كار اينه كه شما بياين و سطح محدوديت هاي خودتونو تعيين كنيد مثلا كاربر به چي دسترسي نداشته باشه گزارشات-حذف- اضافه يا فرم.... حالا شما مياين يه جدول درست مي كنين داخل اون جدول شما نام كاربري و رمز و هرچي خواستين تعريف مي كنين بعد در هون جدول مقدار محدوديت ها رو هم مشخص مي كنيد مثلا به ترتيب فرم 1=A و حذف- ويرايش و اضافه كردن به ترتيب A1,A2,A3 حالا مقدار اونا رو اگه خواستي ترو فلس يا 0و 1 قرار بده!! بعد هنگام لود صفحه اصليت يا فرم لوگن بايد فراخواني كني و چك كني كه اين كاربر به چي دسترسي داره يا نه!! اين يه حالت آسون هست براي منوهاي كم!! وگرنه ميتوني مثل بقيه دوستان يه جدول به براي اطلاعات يوزر ها يكي براي منوها يكي براي كنترل ها و ايجاد ميكني و دونه دونه براي هر كاربر مرحله به مرحله چك مي كني كه دسترسي دارد يا نه!!