我不太明白你为什么在这里做这么多工作,
您的应用程序中应该有一个用户,然后该用户具有用户级别。
我不太清楚您是否使用身份。如果是这样,您只需在 ApplicationUser 中添加 UserState。
示例:
ApplicationDbContext.cs
public class ApplicationDbContext {
...
public DbSet<Ticket> Tickets {get;set;}
public DbSet<TicketMessage> TicketMessages {get;set;}
...
}
用户状态.cs
- 我在这里使用字节来减少数据库中的字节。 | 1 个字节而不是 4 个字节
public enum UserState : byte {
Employee,
Admin
}
TicketState.cs
public enum TicketState: byte {
open,
withdrawn,
Closed
}
ApplicationUser.cs
public class ApplicationUser {
public UserState State {get;set;}
public IEnumerable<Ticket> Tickets {get;set;}
public IEnumerable<TicketMessages> Messages {get;set;}
}
Ticket.cs
//管理员不需要被引用你检查控制器/Razorpage如果查看页面的用户有权限的话!。
public class Ticket {
public Guid Id {get;set;}
public String Title {get;set;}
public String Description {get;set;}
public TicketState State {get;set;}
public String OwnerId {get;set;}
public ApplicationUser Owner {get;set;}
public IEnumerable<TicketMessages> Messages {get;set;}
}
TicketMessage.cs
public class TicketMessage {
public Guid Id {get;set;}
public String Message {get;set;}
public Guid TicketId {get;set;}
public Ticket Ticket {get;set;}
public String OwnerId {get;set;}
public ApplicationUser Owner {get;set;}
}
然后,您可以通过 Identity 轻松创建策略,检查您是否被允许执行此操作(创建、更新、添加、删除、AddTicketMessage)
如果您需要有关身份或其他方面的更多帮助,MSDN 已详细记录,
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-5.0&tabs=visual-studio