PDA

View Full Version : حرفه ای: چطور سطح دسترسی را که سرور به کلاینت میدهد، رو به کلاینت بفرستم؟



hamed_hossani
پنج شنبه 05 دی 1392, 12:48 عصر
سلام
من سروری دارم که کلاینت ها قراره بهش وصل بشن.
کلاینت ها بعد از لوگین کردن براساس سطح دسترسی که تو سرور براشون تعریف کردیم ، اجازه دسترسی به جاهای داشته باشند.توی نرم افزار نتوانند به اون قسمت ها برن.
امنیت هم برام مهم است.نتونن هک کنند.
سوال من:
چطور سطح دسترسی را که سرور به کلاینت میدهد، رو به کلاینت بفرستم؟چه راه های پیشنهاد میدهید.

ممکن زمانی برسه که بخوام سرور رو بروز کنم و می خوام همچنان کلاینت های که از نرم افزار قبلی استفاده می کنند بتونن از سرور اطلاعات دریافت کنن.


با تشکر

arash_flag
شنبه 07 دی 1392, 17:33 عصر
سلام
شما میتونی برای انجام این کار در هنگام متصل شدن به بانک به جای نام دیتابیس از آی پی اون سیستم های کلاینت استفاده کنید .

hamed_hossani
یک شنبه 08 دی 1392, 19:23 عصر
شما میتونی برای انجام این کار در هنگام متصل شدن به بانک به جای نام دیتابیس از آی پی اون سیستم های کلاینت استفاده کنید
منظورم دادن permission به کاربرانم بود.

dashkeyvan
یک شنبه 08 دی 1392, 21:32 عصر
از api های اماده استفاده کن برای ارتابط به جای ساکت پروگرمینگ .سرچ کن پیدا میکنی که توش امکان ارسال فایل و استرینگ به کلاینت هاتو داری میتونی یه رشته با یه اسم خاص بفرستی به کلاینت بعد در سمت کلاینت اونو چک کنی اگه همون چیزی بود که میخوای یه کار خاصی رو انجام بده

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

plus
یک شنبه 08 دی 1392, 22:03 عصر
شما هر عملی که کلاینت ممکنه انجام بده رو اگه بهش یک ID بدین، موقع وصل شدن کلاینت به سرور، در حالت ساده با ارسال یک Dictionary که Key اون ID عمل هست و Value اون True یا False، از طرف سرور برای کلاینت مشخص میکنید که چه اعمالی رو اجازه داره انجام بده.کلاینت بعد از لاگین در سطح UI میتونه منو ها و دکمه های مربوط به اعمالی که مقدارشون False هست رو غیر فعال کنه...البته سمت سرور هم موقعی که کلاینت درخواست انجام یک عملی رو میده باید بررسی بشه که کلاینت اجازه داره یا نه...

مثلا فرض کنید سرور قادر به انجام چهار عمل هست: نمایش فایل ها، حذف فایل، ویرایش فایل و درج فایل.بر اساس Permission ی که برای کلاینت ها تعریف میشه، هر کلاینت ممکنه اجازه انجام یک یا چند تا از این اعمال رو داشته باشه.
اول یک ID برای اینها در نظر میگیریم:

const int ViewFileTID = 1;
const int CreateFileTID = 2;
const int EditFileTID = 3;
const int DeleteFileTID = 4;

حالا برای مثال سرور برای کاربری که اجازه نمایش و درج فایل داره، داده های زیر رو در قالب یک Dictionary یا HashTable یا هر چیز دیگه (بستگی به Format ارتباط کلاینت و سرور داره) بعد از Login میفرسته:

{1, True},
{2, True},
{3, False},
{4, False},

کلاینت با دریافت این داده ها، متوجه میشه که چه اعمالی قابل انجام هست و این رو از طریق UI برای کاربر نمایش میده:

Dictionary<int, bool> permSet = ... // Receive from server
if (permSet[ViewFileTID])
{
menuViewFile.Enabled = true;
}
if (permSet[CreateFileTID])
{
menuCreateFile.Enabled = true;
}
...
...

البته این یک مدل ابتدایی و ساده هست برای اینکه منظور رو بهتون برسونم.خیلی میشه روی این موضوع کار کرد.
پ.ن:
البته اگه کلاینت ها مستقیم به دیتابیس وصل میشن که نیازی به این کارها نیست.کلاینت ها میتونن از طریق دیتابیس سطح دسترسی خودشون رو متوجه بشن.

mousa1992
دوشنبه 09 دی 1392, 00:19 صبح
سلام
ی جدول توی بانکتون ایجاد کنید برای یوزرهای نرم افزار و میتونید نقش هایی رو تعریف کنید و به هر یوزر نقش خاصی رو و یا توی همون جدول یوزر ها فیلدهایی رو داشته باشید که نشان دهنده ی permission ها هستند و مدیر نرم افزار میتونه تعیین کنه که چه کسی چه مجوزهایی رو داشته باشه
یوزر با login کردن به نرم افزار بر اساس اختیاراتش میتونه کاراشو انجام بده
حسن این روش اینه که مدیر میتونه پشت یکی از سیستم های کلاینت login کنه و کارای مربوطشو انجام بده و نیازی نیست حتما از سیستم server استفاده کنه

موفق باشید

hamed_hossani
پنج شنبه 12 دی 1392, 17:43 عصر
سلام .باسپاس از پاسخ شما.
من دارم با سوکت پروگرمینگ می نویسیم

البته اگه کلاینت ها مستقیم به دیتابیس وصل میشن که نیازی به این کارها نیست.کلاینت ها میتونن از طریق دیتابیس سطح دسترسی خودشون رو متوجه بشن.
نه این طور نیست.کلاینت نام کاربری به سرور می فرسته و سرور به پابگاه داده وصل میشه و سطح دسترسی ها رو بر می گردونه!

قرار منو هایی رو برای دسترسی به فعالیت های کاربر براساس سطح دسترسی فعال کنم.تعداد پرمیژن ها بیش از 100 مورده که تو قالب کلاس و زیر کلاسها جا شدن.
دو تا راه بهم پیش نهاد شده:
1= همون که دوستمون plus گفتن.

شما هر عملی که کلاینت ممکنه انجام بده رو اگه بهش یک ID بدین، موقع وصل شدن کلاینت به سرور، در حالت ساده با ارسال یک Dictionary که Key اون ID عمل هست و Value اون True یا False، از طرف سرور برای کلاینت مشخص میکنید که چه اعمالی رو اجازه داره انجام بده.:لبخندساده:
2= serialize کردن فرم و ارسال اون به کاربر!
نمی دونم چه طوری؟
پ.ن:
داده در سوکت پروگرمینگ به صورت byte[] جابجا میشوند.