首页 > 解决方案 > DbContext 模型构建器中的用户详细信息

问题描述

我是 razor pages / efcore / aspnet 身份的新手,并且一直试图弄清楚这一点,但它打败了我。

基本上,我使用 AspNet Identity 进行用户身份验证和授权。我用一个额外的 OrganisationId 扩展了 AspNetUsers,它是组织实体的 FK;并将 ID 添加为身份声明存储中的声明。这工作正常。

现在我需要根据经过身份验证的用户的 organizationId 设置一个efcore 全局过滤器,这样他们就只能查看分配给他们组织的数据。

但是,我无法在模型构建器中访问经过身份验证的用户详细信息。

public class SDMOxContext : IdentityDbContext<
        ApplicationUser, ApplicationRole, string,
        ApplicationUserClaim, ApplicationUserRole, ApplicationUserLogin,
        ApplicationRoleClaim, ApplicationUserToken>
    {

        public SDMOxContext(DbContextOptions<SDMOxContext> options)
            : base(options)
        { }

        protected override void OnModelCreating(ModelBuilder builder)
        {

            base.OnModelCreating(builder);
        // Set global filter so users can only see projects within their organisation.
        builder.Entity<Project>().HasQueryFilter(project => project.OrganisationId == 1);

    }

我需要输入存储为用户声明的用户组织 ID,而不是全局过滤器中的 1。通常我是这样理解的:

User.FindFirstValue("OrganisationId")

但是,当前上下文中不存在用户。

标签: c#entity-frameworkrazorasp.net-identity

解决方案



推荐阅读