处理每个用户的项目可见性的最佳方法是什么?
What is the best way to handle items visibility per user?
我正在寻找处理每个用户的项目可见性的最佳或好方法。
实际上我有以下实体...
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
我想在案例
中为用户显示 post 个项目
- "public" 在这种情况下所有用户都允许显示 Post.
- “自定义”在这种情况下,如果用户存在于 AllowedList 中,则他们可以显示它。
- "OnlyMe" 在这种情况下创建的用户只能显示 Post.
因此,根据该验收标准,我创建了以下代码。
/*
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
}
这是我的解决方案,但我认为这不是那个案例的正确或好的解决方案。
我认为布尔值 IsPublic
应该足以表述所有情况,因为应该始终允许创建者看到 post。 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));
我正在寻找处理每个用户的项目可见性的最佳或好方法。 实际上我有以下实体...
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
我想在案例
中为用户显示 post 个项目- "public" 在这种情况下所有用户都允许显示 Post.
- “自定义”在这种情况下,如果用户存在于 AllowedList 中,则他们可以显示它。
- "OnlyMe" 在这种情况下创建的用户只能显示 Post.
因此,根据该验收标准,我创建了以下代码。
/*
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
}
这是我的解决方案,但我认为这不是那个案例的正确或好的解决方案。
我认为布尔值 IsPublic
应该足以表述所有情况,因为应该始终允许创建者看到 post。 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));