PDA

View Full Version : تعیین سطح دسترسی به روش LINQ



amir313313
چهارشنبه 07 مهر 1395, 19:12 عصر
با سلام خدمت دوستان
من میخوام تو برنامم به روش لینک سطح دسترسی ایجاد کنم به صورتی که اگر یوزر ادمین وارد شد به همه بخش ها دسترسی داشته باشه ولی اگر یوزر دیگه وارد شد نتونه همه بخش ها رو ببینه برای مثال مثلا یکی از دکمه ها خاموش باشه .
تو دیتابیس من نوع داده ای bit تایین کردم و میخوام بگم اگر یوزری وارد شد و برای مثال تیک فیلد چهارم خاموش بود یه دکمه تو فرمم برای اون یوزر خاموش باشه ولی برای ادمین همه دکمه ها روشن باشه

142811

barnamenevisjavan
چهارشنبه 07 مهر 1395, 19:39 عصر
سلام جدولتون صحیح هستش و باید برای دسترسی های موردنظر یه فیلد درنظر بگیرید از نوع bit.
یه پروسیجر بصورت رفرنسی بنویسید تا مقداری که توسط سی شارپ پاس داده میشه رو از جدول چک کنه و مقدار فیلدهارو برگردونه (همون true , false ها).
درنهایت با if میتونید بخش های مختلف رو فعال و غیرفعال کنید.
کد های نمونه برای پروژه خودم :
پروسیجر:

CREATE PROCEDURE [dbo].[GetUserPermission]
@UserId INT,
@Depot BIT OUTPUT,
@Bank BIT OUTPUT,
@Factor BIT OUTPUT,
@Person BIT OUTPUT,
@Setting BIT OUTPUT,
@User BIT OUTPUT
AS
BEGIN
SET @Depot = (SELECT DepotPermission FROM Roles WHERE RoleId IN (SELECT RoleId FROM Users WHERE UserId=@UserId))
SET @Bank = (SELECT BankPersmission FROM Roles WHERE RoleId IN (SELECT RoleId FROM Users WHERE UserId=@UserId))
SET @Factor = (SELECT FactorPermission FROM Roles WHERE RoleId IN (SELECT RoleId FROM Users WHERE UserId=@UserId))
SET @Person = (SELECT PersonPermission FROM Roles WHERE RoleId IN (SELECT RoleId FROM Users WHERE UserId=@UserId))
SET @Setting = (SELECT SettingPermission FROM Roles WHERE RoleId IN (SELECT RoleId FROM Users WHERE UserId=@UserId))
SET @User = (SELECT UserPermission FROM Roles WHERE RoleId IN (SELECT RoleId FROM Users WHERE UserId=@UserId))
END


کدهای سی شارپ:

bool? Depot = false;
bool? Bank = false;
bool? Factor = false;
bool? Person = false;
bool? Setting = false;
bool? User = false;

dc.GetUserPermission(UserId, ref Depot, ref Bank, ref Factor, ref Person, ref Setting, ref User);
if (Setting)
{
btnSettings.Enabled = true;
btnTax.Enabled = true;
}
else
{
btnSettings.Enabled = false;
btnTax.Enabled = false;
}
if (User)
{
btnUsers.Enabled = true;
btnRoles.Enabled = true;
}
else
{
btnUsers.Enabled = false;
btnRoles.Enabled = false;
}


if (Depot)
{
btnDepot.Enabled = true;
btnInOut.Enabled = true;
btnStock.Enabled = true;
btnMovment.Enabled = true;
}

amir313313
پنج شنبه 08 مهر 1395, 14:16 عصر
خیلی ممنون از پاسخ شما زحمت کشیدید و تشکر میکنم بابت وقتی که گذاشتید ولی من با استورپروسیجر ها کار نکردم و کل پروژه رو با روش linq نوشتم و میخواستم این قسمت هم با لینک باشه . ممنون میشم من رو به این روش راهنمایی کنید .

omid nasri
جمعه 09 مهر 1395, 11:16 صبح
خیلی ساده بگم آیدی کاربر جاری رو پیدا کن و از جدول مربوطه اون رکورد رو بخون، در نهایت شرط برسی رو بزار که اگر entity جاری فیلد p4 مقدار true بود دکمه اون فرم نمایش داده بشه یا ...
برای برسی عدم اعمال شرط بر روی ادمین یک کلید بساز موقع پیدا کردن کاربر جاری شرط ادمین رو با استفاده از کلید مشخص کن که ادمین بود شرط ها روش اعمال نشه.
db.tblLogin.Find(id)