我正在尋找處理每個用戶的專案可見性的最佳或好方法。其實我有以下物體......
public class Post
{
public Guid Id {get;set;}
public string Content {get; set;}
public Guid VisibilityId {get; set;}
public Visibility Visibility {get; set;}
}
public class Visibility
{
public Guid Id {get; set;}
public string Name {get; set;}
}
public class AllowedList
{
public Guid PostId {get; set;}
public Guid UserId {get; set;}
}
我為可見性物體添加了以下查找
Public, OnlyMe, Custom
我想在情況下為用戶顯示帖子專案
- “公開”在這種情況下,所有用戶都允許顯示該帖子。
- “自定義”在這種情況下,如果用戶存在于AllowedList 中,那么他們可以顯示它。
- 在這種情況下,“OnlyMe”創建的用戶只能顯示該帖子。
因此,基于該驗收標準,我創建了以下代碼。
/*
1. PublicId => 1,
2. OnlyMeId => 2,
3. CustomId => 3
*/
public IQueryable<Post> GetPosts(ApplicationContext context ,ICurrentUser user)
{
var userId = user.Id;
var posts = context.Posts.Where(p => p.VisibilityId == 1 || (p.VisibilityId == 2 && p.CreatedBy == userId) || context.AllowedList.Any(a => a.PostId == p.Id && a.UserId == userId));
return posts; // return as IQueryble of Posts
}
那是我的解決方案,但我認為這對這種情況來說不是正確或好的解決方案。
uj5u.com熱心網友回復:
我認為布林值IsPublic應該足以制定所有情況,因為應該始終允許創建者查看帖子。OnlyMe將對應于Public == false一個空的允許串列。如果Public為真,則允許串列中是否有條目無關緊要。
public bool IsPublic { get; set; }
var posts = context.Posts
.Where(p => p.IsPublic ||
p.CreatedBy == userId ||
context.AllowedList.Any(a => a.PostId == p.Id && a.UserId == userId));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/419195.html
標籤:
上一篇:它應該顯示被選中并隱藏的內容
