asp.net core本身就自带了认证和授权框架,其中包含了Identity框架,可以自动生成相关的数据库表结构,调用UserManager、RoleManager、SiginManager这些服务,可以自动生成SQL语句访问用户、角色等功能。但是不同的项目,业务功能不一样,Identity自动生成的表结构并不符合所有项目的业务需求,所以我不太看好使用Identity框架来搭建项目,这里总结一下使用asp.net core里面的自定义认证和授权功能来搭建项目的方法。
1、安装EF Core,配置数据库连接
EFCore访问MySQL的nuget包Pomelo.EntityFrameworkCore.MySql,在appsettings.json文件里面配置MySQL的连接字符串
"ConnectionStrings": {
"Mysql": "server=localhost;port=3306;uid=root;pwd=123456;database=authorization_demo"
}
2、创建和配置实体类、生成表结构
这里用到了用于认证和授权的5个基础的实体类,分别代表
[Table("t_user")]
public class User
{
[Key]
public long Id {
get; set; }
public string UserName {
get; set; }
public string Password {
get; set; }
public string Email {
get; set; }
public List<Role> Roles {
get; set; }
}
用户
[Table("t_role")]
public class Role
{
[Key]
public long Id {
get; set; }
public string Name {
get; set; }
public List<User> Users {
get; set; }
public List<Authority> Authoritys {
get; set; }
}
角色
[Table("t_authority")]
public class Authority
{
[Key]
public long Id {
get; set; }
//权限码
public string code {
get; set; }
//描述
public string Description {
get; set; }
public List<Role> Roles {
get; set; }
}
权限
[Table("t_user_role")]
public class UserRole
{
public long UserId {
get; set; }
public long RoleId {
get; set; }
}
用户与角色的中间实体类
[Table("t_role_authority")]
public class RoleAuthority
{
public long RoleId {
get; set; }
public long AuthorityId {
get; set; }
}
角色与权限的中间实体类
然后,创建数据库上下文类,配置用户与角色的多对多关系,角色与权限的多对多关系
public class ApplicationContext : DbContext
{
public ApplicationContext(DbContextOptions options) : base(options)
{
}
public DbSet<User> Users {
get; set; }
public DbSet<Role> Roles {
get; set; }
public DbSet<Authority> Authoritys {
get; set; }
public DbSet<UserRole> UserRoles {
get; set; }
public DbSet<RoleAuthority> RoleAuthoritys {
get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasMany(user => user.Roles).WithMany(role => role.Users).UsingEntity<UserRole><

&spm=1001.2101.3001.5002&articleId=139601563&d=1&t=3&u=c42f8a45da8f404b95bb4736e0782797)

被折叠的 条评论
为什么被折叠?



