ورود

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



rrazavi
چهارشنبه 07 آذر 1386, 15:50 عصر
با سلام
من میخواهم یک برنامه بنویسم که از طریق آن بتوان دسترسی کاربران به جداول وفرمها را ایجاد کرد به این صورت که از طریق برنامه بتوان مشخص کرد که این کاربر به فلان فرم دسترسی داشته باشد.لطفا" راهنمائی فرمایید.
با تشکر

Cave_Man
چهارشنبه 07 آذر 1386, 16:59 عصر
شما میتونید یک Table در دیتابیس ایجاد کنید که علاوه بر فیدهای user و password به ازای هر سطح دسترسی هم یک فیلد از نوع Boolean داشته باشید. و هنگام ورود user به سیستم تون سطوح دسترسی رو در متغیر های عمومی (یا اشیایی) write کنید و هنگام انجام اون عملیات و قبل از شروع به کار ابتدا مجوز دسترسی رو چک کنید

dkhatibi
چهارشنبه 07 آذر 1386, 17:31 عصر
من این کار را تقریبا به همین شکل انجام دادم. با این تفاوت یک جدول برای دسترسی حاوی کد کاربر گذاشتم و بعضی از دسترسی های ممکن را تعریف کردم. در هنگام ورود به برنامه با دستور Locate به شماره ی کاربر می روم و هنگام کلیک برای ورود به قسمتی دسترسی را چک می کنم و در صورت محدودیت پیام مناسب صادر می شودو یک Log هم ثبت می گردد.

SYNDROME
چهارشنبه 07 آذر 1386, 18:38 عصر
شما می توانید به هر قسمت از برنامه که نیاز به دسترسی دارد یک کد یکتا اختصاص دهید.
سپس هر کاربری کد مورد نظر را داشت بتواند از آن قسمت استفاده کنید.
که برای انجام عملیات دسترسی باید یک فرم بنویسید.
موفق باشید

daffy_duck376
یک شنبه 11 آذر 1386, 10:22 صبح
با اجازه دوستان
این روشهایی که دوستان اشاره کردن واسه برنامه های کوچک جواب میده ولی در برنامه های بزرگ به علت زیا د بودن منو ها جواب نمی ده بهترین روش اینه یه نگاهی به سور س بندازید :

Valadi
یک شنبه 11 آذر 1386, 10:25 صبح
این کامپونت هم عالیه

TMS Security System 2.3.2
سایت www.tmssoftware.com

hossein taghi zadeh
یک شنبه 11 آذر 1386, 12:15 عصر
با سلام


شما میتونید یک Table در دیتابیس ایجاد کنید که علاوه بر فیدهای user و password به ازای هر سطح دسترسی هم یک فیلد از نوع Boolean داشته باشید. و هنگام ورود user به سیستم تون سطوح دسترسی رو در متغیر های عمومی (یا اشیایی) write کنید و هنگام انجام اون عملیات و قبل از شروع به کار ابتدا مجوز دسترسی رو چک کنی

بهتره برای سطح دسترسی تنها یک فیلد رشته ای داشته باشید، که هر کاراکتر اون نشاندهنده‌ی سطح دسترسی مربوط به یک قسمت باشه. اون کاراکتر می تونه 0 یا 1 باشه.

SYNDROME
یک شنبه 11 آذر 1386, 16:03 عصر
با سلام
بهتره برای سطح دسترسی تنها یک فیلد رشته ای داشته باشید، که هر کاراکتر اون نشاندهنده‌ی سطح دسترسی مربوط به یک قسمت باشه. اون کاراکتر می تونه 0 یا 1 باشه.
با احترام
آن وقت اگر کاربر دسترسی به قسمتهایی از برنامه نداشته باشد مقادیر صفر است و باعث افزونگی در بانک می شود.
بهتر است کاربر مجوزهایی را که دارد ذخیره کنیم و اگر مجوزی در لیست مجوزهای او نبود یعنی مجوز قسمت مورد نظر را ندارد.
موفق باشید

Bahmany
دوشنبه 12 آذر 1386, 07:36 صبح
با سلام
من میخواهم یک برنامه بنویسم که از طریق آن بتوان دسترسی کاربران به جداول وفرمها را ایجاد کرد به این صورت که از طریق برنامه بتوان مشخص کرد که این کاربر به فلان فرم دسترسی داشته باشد.لطفا" راهنمائی فرمایید.
با تشکر

به شما پیشنهاد می کنم یک فیلد از نوع رشته در بانک اطلاعاتی تعریف کنید و آن را برای مقاصد خود به گونه زیر تعیین کنید :
1011111121111111
بعنوان مثال اگر اولین کاراکتر 1 بود کاربر دسترسی به فرم ورود اطلاعات رو داره اگر 0 بود نداره و برای مثال اگر کارکتر دوم صفر بود کاربر نمی تونه از فرم شماره 3 استفاده کنه یا اگر کارکتر نهمی 2 بود کاربر فقط می تونه فرم ورود اطلاعات دیگری رو مرور کنه.

SYNDROME
دوشنبه 12 آذر 1386, 07:59 صبح
به شما پیشنهاد می کنم یک فیلد از نوع رشته در بانک اطلاعاتی تعریف کنید و آن را برای مقاصد خود به گونه زیر تعیین کنید :
1011111121111111
بعنوان مثال اگر اولین کاراکتر 1 بود کاربر دسترسی به فرم ورود اطلاعات رو داره اگر 0 بود نداره و برای مثال اگر کارکتر دوم صفر بود کاربر نمی تونه از فرم شماره 3 استفاده کنه یا اگر کارکتر نهمی 2 بود کاربر فقط می تونه فرم ورود اطلاعات دیگری رو مرور کنه.
با احترام
دوست عزیز
به نظر شما این کار باعث افزونگی نمی شود(مثلا زمانی که دسترسی ندارد و مقدار 0 ذخیره شود)
اگر هم یک دسترسی به طور کاملا اتفاقی جا بیفتد و یا پاک شود آن وقت کل دسترسی های برنامه به هم می ریزد.
موفق باشید

Bahmany
دوشنبه 12 آذر 1386, 12:46 عصر
با احترام
دوست عزیز
به نظر شما این کار باعث افزونگی نمی شود(مثلا زمانی که دسترسی ندارد و مقدار 0 ذخیره شود)
اگر هم یک دسترسی به طور کاملا اتفاقی جا بیفتد و یا پاک شود آن وقت کل دسترسی های برنامه به هم می ریزد.
موفق باشید

درسته حق با شماست
چون چاره دیگری نیست این روش هیچ فرقی با روش دارا بودن فیلد برای هر فرم بصورت bool نمی کنه چون اگر این کدها بوسیله برنامه نویس خوب محکم کاری نشن مشخصا به مشکل می خورن.
اما
من همکنون در بیشتر پروژه هام از این روش استفاده کردم و مشکلی نداشته ام.


برنامه ای که این نکته رو توش سخت رعایت کرده بودم از این قرار بود:
اول برنامه اجرا می شد - سپس با Username ی که فقط به جدول کاربران مجوز داشت متصل می شد - سپس مجوز ورود و اون رشته (1101010101) رو می خوند و سپس یا کاربری متصل می شد که فقط دسترسی به اعمال رو داشت که توسط رشته تعریف می شدند
البته توی اولین login از hash نیز استفاده کرده بودم:تشویق:

این کار یعنی اعمال از طریق : 1- برنامه بروی فرم ها 2- از طریق Grant بروی جداولی که می خواهد کاربر مورد نظر روش کار کنه

Cave_Man
دوشنبه 12 آذر 1386, 14:17 عصر
با احترام
دوست عزیز
به نظر شما این کار باعث افزونگی نمی شود(مثلا زمانی که دسترسی ندارد و مقدار 0 ذخیره شود)
اگر هم یک دسترسی به طور کاملا اتفاقی جا بیفتد و یا پاک شود آن وقت کل دسترسی های برنامه به هم می ریزد.
موفق باشید
به نظر من افزونگی اینجا بی معنیه چون سطوح دسترسی انقدر مهم هست که چند بایتی رو برای در دسترس نبودن و یا در دسترس بودن یک قسمت از سیستم اختصاص بدیم
بعضی وقت ها به سیستم طوری نگاه میکنید که خودتون هم آخرش نمیفهمید این سیستم چیه و انقدر پیچیده میشه که بهتره همین الان بزاریدش کنار و شورع کنید و یه سیستم دیگه از اول بنویسید
افزونگی موقعی اهمیت پیدا میکنه که مثلا سه چهار تا 1 بین مثلا 100 تا صفر مطرح باشه در ضمن افزونگی رو برای مقادیر Valid یا 1 معمولا تعریف نمیکنن یعنی نمیشه گفت چون 3 یا 4 تا صفر میون 100 تا یک داریم این میشه افزونگی . من باب مثال عرض شد

SYNDROME
دوشنبه 12 آذر 1386, 17:54 عصر
به نظر من افزونگی اینجا بی معنیه چون سطوح دسترسی انقدر مهم هست که چند بایتی رو برای در دسترس نبودن و یا در دسترس بودن یک قسمت از سیستم اختصاص بدیم
بعضی وقت ها به سیستم طوری نگاه میکنید که خودتون هم آخرش نمیفهمید این سیستم چیه و انقدر پیچیده میشه که بهتره همین الان بزاریدش کنار و شورع کنید و یه سیستم دیگه از اول بنویسید
افزونگی موقعی اهمیت پیدا میکنه که مثلا سه چهار تا 1 بین مثلا 100 تا صفر مطرح باشه در ضمن افزونگی رو برای مقادیر Valid یا 1 معمولا تعریف نمیکنن یعنی نمیشه گفت چون 3 یا 4 تا صفر میون 100 تا یک داریم این میشه افزونگی . من باب مثال عرض شد
با احترام
افزونگی افزونگی است حتی اگر یک بایت باشد.
افزونگی زمانی به وجود می آید که طراحی اشتباه باشد.
ولی نظر من این است که چیزی را که لازم نداریم چرا باید در بانک ذخیره کنیم.
موفق باشید

Cave_Man
دوشنبه 12 آذر 1386, 18:17 عصر
با احترام
افزونگی افزونگی است حتی اگر یک بایت باشد.
افزونگی زمانی به وجود می آید که طراحی اشتباه باشد.
ولی نظر من این است که چیزی را که لازم نداریم چرا باید در بانک ذخیره کنیم.
موفق باشید
برای اینکه به حرف هات اعتبار بدید باید Solution راه حل ارایه بدید برای اینکه به قول شما دچار افزونگی یه بایتی نشیم چه کنیم؟ گر چه باید زود تر از اینا نظرت رو میگفتید

SYNDROME
سه شنبه 13 آذر 1386, 08:02 صبح
برای اینکه به حرف هات اعتبار بدید باید Solution راه حل ارایه بدید برای اینکه به قول شما دچار افزونگی یه بایتی نشیم چه کنیم؟ گر چه باید زود تر از اینا نظرت رو میگفتید
در پست 4 یک روش را ارائه کردم و برای تکمیل آن صحبتها.
شما در یک جدول به شکل زیر طراحی می کنید.


User , Access

حالا به تعداد دسترسی که کاربر دارد رکورد ایجاد می کنیم و در فیلد Access کد مجوز و در فیلد User کد کاربر را قرار می دهیم.
اگر کاربری کد X را نداشت یعنی مجوز ندارد.
موفق باشید

Cave_Man
سه شنبه 13 آذر 1386, 15:37 عصر
[/code]حالا به تعداد دسترسی که کاربر دارد رکورد ایجاد می کنیم و در فیلد Access کد مجوز و در فیلد User کد کاربر را قرار می دهیم.
اگر کاربری کد X را نداشت یعنی مجوز ندارد.
موفق باشید
این روش شما که افزونگی رو بیش از حد زیاد میکنه فیلد کاربر یا User تا دلت بخاد داده تکراری داره فدات شم!
فرض کن شما فقط سه تا کاربر داری و مثل سیستم من 50 تا سطح دسترسی اونوقت باید برای اینکه مشخص بشه که سه کاربر به همه قسمت ها دسترسی دارن حجم داده های تکراری میشه 50*3*حجم فید کد User (چهار بایت) که در برابر روش قبلی استفاده از فیلدهای یه بایتی Boolean عدد نجومی خواهد بود.
توی مثالی که گفتم فقط سه کاربر بود حالا بریا تعداد 10 یا 20 کاربر.........

SYNDROME
سه شنبه 13 آذر 1386, 21:59 عصر
این روش شما که افزونگی رو بیش از حد زیاد میکنه فیلد کاربر یا User تا دلت بخاد داده تکراری داره فدات شم!
فرض کن شما فقط سه تا کاربر داری و مثل سیستم من 50 تا سطح دسترسی اونوقت باید برای اینکه مشخص بشه که سه کاربر به همه قسمت ها دسترسی دارن حجم داده های تکراری میشه 50*3*حجم فید کد User (چهار بایت) که در برابر روش قبلی استفاده از فیلدهای یه بایتی Boolean عدد نجومی خواهد بود.
توی مثالی که گفتم فقط سه کاربر بود حالا بریا تعداد 10 یا 20 کاربر.........
ولی دوست عزیز هر چیزی که در بانک تکرار شود افزونگی نیست.
در ضمن فیلد کد کاربر می تواند tinyint باشد تا به جای 4 بایت 1 بایت بگیرد.
موفق باشید

Cave_Man
سه شنبه 13 آذر 1386, 22:27 عصر
ولی دوست عزیز هر چیزی که در بانک تکرار شود افزونگی نیست.
در ضمن فیلد کد کاربر می تواند tinyint باشد تا به جای 4 بایت 1 بایت بگیرد.
موفق باشید
فکر میکنم داری به همون عدد یک بایت خودمون نزدیک میشی(منظورم در طراحی فیلد های Booleanهست)عدد های دیگه چی؟ 50 *n که n تعداد کاربر است !!!!!!!
راه حلی که ارائه دادی مسئله رو خراب تر میکنه
اگه طراحی شما درست بود احتمالا با یه فیلد با کد کاربری یک بایتی که باهاش حد اکثر 256 کاربر میشه عضویت شوند فکر کن که توی سایت برنامه نویس هم 256 کاربر عضو باشن و بیشتر از اون نشه!!!

SYNDROME
چهارشنبه 14 آذر 1386, 05:05 صبح
فکر میکنم داری به همون عدد یک بایت خودمون نزدیک میشی(منظورم در طراحی فیلد های Booleanهست)عدد های دیگه چی؟ 50 *n که n تعداد کاربر است !!!!!!!
راه حلی که ارائه دادی مسئله رو خراب تر میکنه
اگه طراحی شما درست بود احتمالا با یه فیلد با کد کاربری یک بایتی که باهاش حد اکثر 256 کاربر میشه عضویت شوند فکر کن که توی سایت برنامه نویس هم 256 کاربر عضو باشن و بیشتر از اون نشه!!!
دوست عزیز من فقط یک روش را پیشنهاد دادم.
می تواند این روش هم ضعفهایی داشته باشد ولی چون خودم سالها با این روش کار کرده ام و خیلی هم ساده به اهدافم رسیده ام فقط به دوستان توصیه کرده ام.
موفق باشید

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

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

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

zman123456
چهارشنبه 17 مهر 1387, 14:11 عصر
دوست عزیز فکر کنم باید بیشتر از اینا برای مجوز دهی وقت و انرژی گذاشته بشه.
اینا خوبن ولی هرکی باشه راحت میتونه با صفر و یک دادن های متوالی دسترسی ها رو بدست بیاره.
من یه سیستم مجوز دهی دارم ولی رایگان نیست.میتونم اینو به شما هم بدم.
قابلیتهای خوبی داره.

ariobarzan
چهارشنبه 17 مهر 1387, 14:49 عصر
1-روشي كه براي هر دسترسي يك فيلد boolean تعريف بشه چه مشكلي داره؟
2- اگه يك فيلد به عنوان گروه كاري تعريف بشه و به ازاء هر مقدار اون سطح دسترسي مشخص بشه چطوره؟
مثلا اين فيلد يكي از مقادير زير را داشته باشه:
admin
power
editor
guest
.
.
.

pad_kay
چهارشنبه 17 مهر 1387, 16:28 عصر
1-روشي كه براي هر دسترسي يك فيلد boolean تعريف بشه چه مشكلي داره؟
2- اگه يك فيلد به عنوان گروه كاري تعريف بشه و به ازاء هر مقدار اون سطح دسترسي مشخص بشه چطوره؟
مثلا اين فيلد يكي از مقادير زير را داشته باشه:
admin
power
editor
guest
.
.
.
بحث جالبی !!!!!!!!!!!!!!!!!!!
اشکالش در این که اگر لو بره به راحتی یک یوز می تونه سطح دسترسی خود را افزایش بده
فراموش نشود باید روشی اتخاذ شود که غیر قابل فهم توسط کاربر باشد تا نتواند به راحتی سطح دسترسی خودش را تغییر دهد
موفق باشید

ariobarzan
شنبه 20 مهر 1387, 11:19 صبح
خب يه كم سليقه هم چاشنيش بشه خوشمزه تر ميشه
مثلا اگه از Base64 براي كد كردن استفاده بشه مسله حله
نظرتون چيه؟