ورود

View Full Version : سوال: ایجاد جدیدن User برای اپلیکیشن



abdoullah.aberi
سه شنبه 08 مهر 1393, 22:15 عصر
درود و سلام به دوستان برنامه نویس امیدوارم موفق باشین
من روی یه نرم افزار کار میکنم و میخوام توی نرم افزار چندین سطح دسترسی داشته باشم مثلا یدونه ادمین باشه و چندتا هم User معمولی که بتونن فقط توی پروفایل خودشون تغییر ایجاد کنن یا فقط مشاهده کنن نمیدونم از چی باید استفاده کنم و به چه چیزی نیاز دارم ؟

ممنون میشم راهنمایی کنین تشکر

vahid-p
سه شنبه 08 مهر 1393, 23:24 عصر
سلام به هم استانی عزیز :چشمک:
خب این یه راه کلی و ثابت نداره. هر کاری میتونی انجام بدی. اگر یک کلاس User داشته باشیم و AdminUser و EndUser ساب کلاس های اون باشن، میتونی با همین موضوع چک کنی که آبجکت از کدوم کلاس هست و آیا دسترسی داره یا نه. یا اینکه بیای مثلا یک فیلد یا چند فیلد بعنوان Permission دسترسی رو کنترل کنند. فقط کافیه یه متد درست کنی که Permission بعلاوه Action رو بگیره و مقدار true یا false رو برگردونه برات تا با اون برای هر متد چک کنی کاربر میتونه از این استفاده کنه یا نه. البته این یه راهه. راه های دیگه ای هم هست که مثلا میتونی از طریق مثلا یه جدول برای دسترسی ها ایجاد کنی و... . یه عمل کنترلیه که بستگی به خودت داره.
ولی من پیشنهادم اینه از همون فیلد کنترلی استفاده کنی. مثلا اگر از یک int استفاده کنی، میدونی چندین حالت ممکن رو میتونی پوشش بدی؟ ( 2^32) یا میتونی برای هر بیت از 32 بیتش یک دسترسی رو مشخص کنی. مثلا میگی اولین بیت اگر 0 بود یعنی دسترسی نداری و اگر 1 بود دسترسی داری. با این کار با یک int میتونی 32 نوع دسترسی رو با این روش کنترل کنی. خلاصه روش و اینا اختیاری است.
فقط پیشنهادم اینه که جوری بنویس که تغییر دادنش بعدا ساده باشه. یعنی به صرف تغییر دادن PermissionFlag بتونی دسترسی های جدیدی رو ایجاد کنی. چون معمولا در سیستم ها بخشی رو قرار میدن که میزان دسترسی افراد رو بتونی تغییر بدی. پس روشی انتخاب کن که بخش ها مستقل کار کنه. یکی از روش ها دسته بندی کاربر ها هست. مثلا به هر نوع کاربر ( نه هر کاربر ) یک عدد نسبت میدی و هنگام فراخوانی متد، دسترسیش رو از طریق شماره گروه کاربر و چک کردن با جدول دسترسی ها، کنترل میکنه.

مثلا یکی از روش ها که البته بهترین نیست :

public class User {
protected int permissionFlag;
public User(int permission){
this.permissionFlag=permission;
}

// بیت n ام رو برمیگردونه
public int getBit(int shift){
return ((permissionFlag>>(shift-1))%2);
}
}

public boolean add(User){
if(isDenied("add",user) return false;
// to do
}

public boolean isDenied(String action,User user){
switch(action){
case "add":
if(user.getBit(1)==1) return true;
break;
case "delete":
if(user.getBit(2)==1) return true;
break;
default:
return false;
}
return false;
}


از همه اینها که بگذریم، جاوا خودش کلاس هایی برای اینکار هم داره تو پکیج java.security ( البته مطمئن نیستم، از اسمش چنین چیزی برداشت کردم :) )