مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

iran

عضویت از 1394/01/31

مشکل در نمایش لیست دسترسیها

  • یکشنبه 22 مهر 1397
  • 11:09
تشکر میکنم

سلام
فرض کنید جداول زیر را داریم

CREATE TABLE [dbo].[User](
	[UserId] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
	[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Role](
	[RoleId] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED 
(
	[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Permission](
	[PermissionId] [int] IDENTITY(1,1) NOT NULL,
	[UserId] [int] NULL,
	[RoleId] [int] NULL,
	[Status] [bit] NULL,
 CONSTRAINT [PK_Permission] PRIMARY KEY CLUSTERED 
(
	[PermissionId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

و داده های زیر را هم وارد کرده ایم

INSERT INTO [dbo].[Role]([Name])VALUES('ثبت')
INSERT INTO [dbo].[Role]([Name])VALUES('ویرایش')
INSERT INTO [dbo].[Role]([Name])VALUES('حذف')
INSERT INTO [dbo].[Role]([Name])VALUES('مشاهده کلی')
INSERT INTO [dbo].[Role]([Name])VALUES('مشاهده جزئی')
INSERT INTO [dbo].[Role]([Name])VALUES('روزانه')
INSERT INTO [dbo].[Role]([Name])VALUES('شبانه')

INSERT INTO [dbo].[User]([Name])VALUES('کاربر1')
INSERT INTO [dbo].[User]([Name])VALUES('کاربر2')
INSERT INTO [dbo].[User]([Name])VALUES('کاربر3')
INSERT INTO [dbo].[User]([Name])VALUES('کاربر4')


INSERT INTO [dbo].[Permission]([UserId],[RoleId],[Status])VALUES(1,1,1)
INSERT INTO [dbo].[Permission]([UserId],[RoleId],[Status])VALUES(1,2,1)

حال می خواهم به کمک linq دستوری بنویسم که  به من  لیتسی  بدهد که هر کاربری به چه چیزهای دسترسی دارد و ندارد بصورت فعال و غیر فعال
مثلا کاربر1 را بوصرت زیر نمایش بدهد
1-ثبت فعال
2-ویرایش فعال
3-حذف غیرفعال
4- مشاهده کلی غیرفعال
5- مشاهده جزئی غیرفعال
6-روزانه غیرفعال
7-شبانه غیرفعال
و برای بقیه کاربران هم همه باید غیرفعال باشد
این دستور را چگونه باید بنویسم

پاسخ های این پرسش

تعداد پاسخ ها : 6 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 22 مهر 1397
  • 11:13

از Ef استفاده می کنید ؟

کاربر سایت

iran

عضویت از 1394/01/31

  • یکشنبه 22 مهر 1397
  • 11:28
باسلام بله
کاربر سایت

iran

عضویت از 1394/01/31

  • دوشنبه 23 مهر 1397
  • 11:01

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

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • دوشنبه 23 مهر 1397
  • 11:37

به شکل زیر عمل کنید:

var userRoles = context.Permissions
    .Where(permission => permission.UserId == 1)
    .Select(permission => new {permission.Role.Name}).ToList();

foreach (var userRole in userRoles)
{
    Console.WriteLine(userRole);
}

کاربر سایت

iran

عضویت از 1394/01/31

  • دوشنبه 23 مهر 1397
  • 12:07

سلام

مهندس این دستور فقط لیست دسترسیهای که به کاربر اختصاص یافته است را میدهد اما من کلیه دسترسیها را میخواهم 

دسترسیها که کاربر دارد وضیعت فعال باشد و دسترسی ندارد وضیعتش غیرفعال باشد

باتشکر از لطفتان

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • دوشنبه 23 مهر 1397
  • 13:02
var userPermissions = context.Permissions
    .Where(permission => permission.UserId == 1)
    .ToList();

var permissions = context.Permissions.ToList();

var list = permissions.Select(x => new
{
    PermissionName = x.Name,
    IsActive = userPermissions.Any(y => y.Name == x.Name)
}).ToList();

foreach (var result in list)
{
    Console.WriteLine($"Permission:{result.Permission } IsActive:{result.IsActive}");
}   

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

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

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)