在Aspnetboilerplate中创建不同类型的用户

时间:2019-03-19 16:18:44

标签: asp.net-mvc-5 asp.net-boilerplate

我正在使用ASP.NET Boilerplate,并且正在尝试获得最佳方法:

创建其他类型的用户(学生,教师,管理员),我读了此线程:https://forum.aspnetboilerplate.com/viewtopic.php?f=5&t=3213 但是我对所有过程都有些困惑。

我已经创建了扩展User实体的实体,但是我不确定如何在Application Service上使用它或如何创建实体管理器类。

我的首要目标是从管理页面添加/注册不同类型的用户,并可能允许这种不同类型的用户自己注册。

预先感谢...

更新:我一直在进行测试,首先创建另一个实体,这很简单,扩展User类,我只添加了2个属性

public class Client : User
{
    public virtual DateTime BirthDate { get; set; }

    public virtual DateTime RegisterDate { get; set; }
}

在创建此类之后,便创建了迁移,非常重要的一点是检查AbpUsers表是否已更改,并添加了一个名为Discriminator的列,该列基于模式TPH Entity Framework在此Discriminator列以及迁移上我们需要为此列添加默认值,请检查下一张图片:

Migration of Client

此界面:

public interface IClientAppService : IApplicationService 
{
    ListResultDto<ClientDto> GetClients(GetClientInput input);
    Task CreateClient(ClientDto input);
}

此AppService

public class ClientAppService : ApplicationService, IClientAppService
{
    private readonly IRepository<Client, long> _clientRepository;        

    public ClientAppService(IRepository<Client, long> clientRepository)
    {
        _clientRepository = clientRepository;
    }

    public async Task CreateClient(ClientDto input)
    {
        try
        {
            var client = input.MapTo<Client>();

            client.SetNormalizedNames();
            await _clientRepository.InsertAsync(client);
        }
        catch(Exception e)
        {
            var a = e;
        }

    }

    public ListResultDto<ClientDto> GetClients(GetClientInput input)
    {
        var clients = _clientRepository
            .GetAll()
            .WhereIf(
                !input.Filter.IsNullOrEmpty(),
                c => c.Name.Contains(input.Filter) ||
                c.Surname.Contains(input.Filter) ||
                c.EmailAddress.Contains(input.Filter)
            )
            .OrderBy(c => c.Surname)
            .ThenBy(c => c.Name)
            .ToList();

        return new ListResultDto<ClientDto>(clients.MapTo<List<ClientDto>>());
    }
}

此ClientDto

public class ClientDto : EntityDto<long>
{
    [Required]
    [StringLength(AbpUserBase.MaxUserNameLength)]
    public string UserName { get; set; }

    [Required]
    [StringLength(AbpUserBase.MaxNameLength)]
    public string Name { get; set; }

    [Required]
    [StringLength(AbpUserBase.MaxSurnameLength)]
    public string Surname { get; set; }

    [Required]
    [EmailAddress]
    [StringLength(AbpUserBase.MaxEmailAddressLength)]
    public string EmailAddress { get; set; }

    public bool IsActive { get; set; }

    public string[] RoleNames { get; set; }

    [Required]
    [StringLength(18, ErrorMessage = "La {0} debe ser de al menos {2} caracteres.", MinimumLength = 6)]
    [RegularExpression(@"^((?=.*[a-z])(?=.*[A-Z])(?=.*\d)).+$")]
    [DataType(DataType.Password)]
    [Display(Name = "Contraseña")]
    public string Password { get; set; }

    [Required]
    [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? BirthDate { get; set; }

    [Required]
    [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? RegisterDate { get; set; }
}

此Automapper配置

cfg.CreateMap<ClientDto, Client>();
            cfg.CreateMap<ClientDto, Client>().ForMember(x => x.Roles, opt => opt.Ignore());
            cfg.CreateMap<Client, ClientDto>();

并将其添加到dbContext

public DbSet<Client> Clients { get; set; }

现在所有这些都在起作用!我可以使用GetClients和CreateClient。

我想这是正确的路径,如果有人可以检查代码,并且也许能给我一些有关如何使用某些User类功能的建议,那么,

现在我不能使用ClientManager类,我不知道使用什么参数。所以我只是在使用存储库。

0 个答案:

没有答案