PDA

View Full Version : گفتگو: استفاده از تجربه: نحوه پیاده سازی سطح دسترسی



fool66
جمعه 30 بهمن 1394, 20:12 عصر
سلام دوستان
میخواستم در مورد نحوه پیاده سازی و کدنویسی سطح دسترسی برای کاربرا و مدیریت اون سوال کنم
شماها چطور سطح دسترسی رو تعریف و بررسی میکنید؟؟؟
توی هر فرم عملیات واکشی از بانک باید انجام بشه؟؟ (سرعت برنامه)
مثلا میخوام بگم یه کاربر به درج فلان دسترسی داشته باشه به ویرایشش نداشته باشه یا به فرم 1 دسترسی داشته باشه به فرم 2 نداشته باشه و....
شما چطور پیاده سازی میکنید

vB.N3T
جمعه 30 بهمن 1394, 20:35 عصر
سلام
با هر روشی میتونی این کار انجام بدی.با روش درج در بانک و دستی و ..
من در یکی از برنامه هام این این روش استفاده کردم .
واستون قرار میدم اگر مفید بود استفاده کنید

ابتدا در فرم لاگین بعد از خط public partial class
این متغیر رو تعریف کنید
public static int myFlag = 0;
حال با استفاده از این متغیر میشه فهمید ادمین لاگین شده به برنامه یا یوزر و ادامه که چه منو ها یا چه فرم هایی دسترسی داشته باشه
ادامش...
داخل فرم لاگین 2 تا رادیو باتن میزاری
یکی واسه یوزر معمولی و یکی هم ادمین

داخل دکمه ورود

if (radio_user.Checked == true)
{
myFlag = 1;
Main fmain = new Main();
fmain.Show();
this.Hide();

}
else
myFlag = 0;

و بقیه کد ها سلکت یوزر نیم و پسورد مربوط به برنامت

حالا میایی فرم اصلی برنامه در رویداد فرم لود

if (LoginAdmin.myFlag == 1)
{
menuStrip1.Items["M0"].Enabled = false;
menuStrip1.Items["M1"].Enabled = false;
menuStrip1.Items["M4"].Enabled = false;
menuStrip1.Items["M5"].Enabled = false;
M3_1.Enabled = false;
groupBox1.Enabled = false;
groupBox2.Enabled = false;
groupBox4.Enabled = false;
groupBox5.Enabled = false;
groupBox7.Enabled = false;
groupBox8.Enabled = false;

}

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

ali_md110
شنبه 01 اسفند 1394, 01:56 صبح
سلام
ب نظر من استفاده از کلاسهای امنیتی دات نت خیلی انعطاف داره و برنامه رو دچار پیچیدگی و وابستگی نمی کنه و نیاز به تعریف کدهای اضافی هم نیستیم
یکی از این کلاسها GenericIdentity هست و در فضای نام System.Security.Principal قرار داره
که یک کاربر لاگین شده رو تحویل میگیره
ما میتونیم به اون کاربر نقشهای متفاوتی بدیم و در همه جای برنامه از از این کلاس جنریک بخوایم برناممون رو با توجه به نقشها کنترل کنه


private void Login()
{
string[] roles = { "User", "Admin" };
GenericIdentity identity = new GenericIdentity("ali");
Thread.CurrentPrincipal = new GenericPrincipal(identity, roles);
string name = identity.Name;
bool Auth = identity.IsAuthenticated;
bool isInRole = Thread.CurrentPrincipal.IsInRole("User");


if (isInRole)
{
Console.WriteLine("The test was successful as a user in the user-defined role of User");
}
else
{
Console.WriteLine("The test was not successful!");
}
}

در کد لاگین بالا یک کاربر بنام ali با دو نقش User و Admin توی برنامه میتونه وظایف خودشو انجام بده
فقط کافی هست متدها و کلاسهایمان را با صفت PrincipalPermission مزین کنیم



[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
void AdminFunction() { }

بدیهی هست که این attribute میتونه به یک فرم ویندوزی هم نسبت داده بشه و در این صورت تمام توابع درون اون فرم یا کلاس باید یک کاربر Admin باشند تا بتوانند دسترسی داشته باشند

fool66
شنبه 01 اسفند 1394, 02:44 صبح
من در یکی از برنامه هام این این روش استفاده کردم .
واستون قرار میدم اگر مفید بود استفاده کنید
ابتدا در فرم لاگین بعد از خط public partial class
این متغیر رو تعریف کنید
public static int myFlag = 0;

این واسه مدیر و کارمند معمولی خوبه ولی برای حالات پویاتر به نظرم جالب نمیاد


سلام
ب نظر من استفاده از کلاسهای امنیتی دات نت خیلی انعطاف داره و برنامه رو دچار پیچیدگی و وابستگی نمی کنه و نیاز به تعریف کدهای اضافی هم نیستیم
یکی از این کلاسها GenericIdentity هست و در فضای نام System.Security.Principal قرار داره
که یک کاربر لاگین شده رو تحویل میگیره

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

vB.N3T
شنبه 01 اسفند 1394, 06:51 صبح
درسته بله این سطح برای یه برنامه معمولی گذاشتم که نسبت به پروژه واسش کافی بودش

ali_md110
شنبه 01 اسفند 1394, 08:51 صبح
شما میتونید مدیریت دسترسی رو هم بزارید بر عهده خود کاربر یا مدیر نرم افزار
من به شما ایده دادم بقیش خودتون تحقیق کنید
میتونید یک کلاس CustomAttribute بنویسید بنام MYPermission و اون کلاس از دیتابیس نقشهای یک کاربر لاگین شده رو بخونه و با توجه به سطوح مختلف دسترسی برای اون نقشها به کاربران مجوز بدیم
دیگه اونوقت این خط کد مقادیر Role رو از دیتابیس میخونه نه توسط کد نویس


[MYPermission(SecurityAction.Demand, Role = "DataBaseRoles")]



این میشه یک لاگین و سطح دسترسی پویا

fool66
چهارشنبه 05 اسفند 1394, 13:18 عصر
شما میتونید مدیریت دسترسی رو هم بزارید بر عهده خود کاربر یا مدیر نرم افزار
من به شما ایده دادم بقیش خودتون تحقیق کنید
میتونید یک کلاس CustomAttribute بنویسید بنام MYPermission و اون کلاس از دیتابیس نقشهای یک کاربر لاگین شده رو بخونه و با توجه به سطوح مختلف دسترسی برای اون نقشها به کاربران مجوز بدیم
دیگه اونوقت این خط کد مقادیر Role رو از دیتابیس میخونه نه توسط کد نویس


[MYPermission(SecurityAction.Demand, Role = "DataBaseRoles")]



این میشه یک لاگین و سطح دسترسی پویا

اگر تونستی یه آموزش عملی بزار