PDA

View Full Version : سوال: مشکل در نمایش لیست دسترسیها



Iran58
یک شنبه 22 مهر 1397, 10:21 صبح
سلام
فرض کنید جداول زیر را داریم

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-شبانه غیرفعال
و برای بقیه کاربران هم همه باید غیرفعال باشد
این دستور را چگونه باید بنویسم

Mahmoud.Afrad
یک شنبه 22 مهر 1397, 17:47 عصر
نامگذاری جدولهاتون اشتباه هست. یعنی طراحی شما اشتباه هست.

لینک زیر رو ببینید
https://stackoverflow.com/a/46016930

Iran58
دوشنبه 23 مهر 1397, 07:44 صبح
نامگذاری جدولهاتون اشتباه هست. یعنی طراحی شما اشتباه هست.

لینک زیر رو ببینید
https://stackoverflow.com/a/46016930
سلام
آیا میشه برای همین جداول دستور linq نوشت یانه

Mahmoud.Afrad
دوشنبه 23 مهر 1397, 16:26 عصر
var result =
from user in db.User
from role in db.Role
let permission = db.Permission.FirstOrDefault(p => p.UserId == user.UserId && p.RoleId == role.RoleId)
select new
{
user.UserId,
user.Name,
role.RoleId,
RoleName = role.Name,
PermissionId = permission != null ? permission.PermissionId : (int?) null,
Status = permission != null ? permission.Status : null
};