ASP.Net BoilerPlate-在实体中隔离用户数据

时间:2018-07-08 19:13:53

标签: c# aspnetboilerplate

我想确保在这里正确使用ABP。我有实体,其中包含许多用户的记录。我希望用户仅查看其记录。我一直在关注“任务列表”教程:Tutorial。一切都非常清晰,直到我想让用户记录仅对该用户可见。

是否有更直接的方法来执行此操作,以便在查询数据时不在Linq查询中指定UserId?或者,当我查询用户数据时,是否需要提供当前用户ID?

编辑:经过更多的试验之后,我意识到Thing实体具有CreatorUserId,可用于我的查询。将外键添加到AppThing for UserId是否转储?

这是我的事物实体,其中包含UserId的ForeignKey

[Table("AppThing")]
public class Thing : FullAuditedEntity
{
    [Required]
    public string Name { get; set; }

    [ForeignKey(nameof(UserID))]
    public User AssignedUser { get; set; } //returns null. IDK how to make this be ther User from UserID.
    public long? UserID { get; set; }

    public Thing()
    {
        CreationTime = Clock.Now;
    }

    public Thing(string name, long? userID = null)
        : this()
    {
        Name = name;
        UserID = userID;
    }
}

这是我的ThingAppService,它为已登录的用户获取所有内容的列表。

public class ThingAppService : ThingAppServiceBase, IThingAppService
{
    private readonly IRepository<Thing> _thingRepository;

    public ThingAppService(IRepository<Thing> houseRepository)
    {
        _thingRepository = houseRepository;
    }

    public async Task<ListResultDto<ThingListDto>> GetAll(GetAllThingsInput input)
    {
        var things = await _thingRepository
            .GetAll()
            .Where(q=>q.UserID == AbpSession.UserId) //is this always required when segregating users data?
            .OrderByDescending(t => t.CreationTime)
            .ToListAsync();

        return new ListResultDto<ThingListDto>(
            ObjectMapper.Map<List<ThingListDto>>(things)
        );
    }
}

0 个答案:

没有答案