asp.net5中用户认证与授权(2)

2025-05-29 0 63

上篇文章给大家介绍了asp.net5中用户认证授权(1),基础建立好了,紧接着就要创建对基础类进行操作的类,也就是实现基础类的增删改查当然,为了使用asp.net5的认证机制,这些都是通过特定的接口来实现的。

比如,对于角色来说,角色管理要实现的接口如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
public interface IQueryableRoleStore<TRole> : IRoleStore<TRole>, IDisposable where TRole : class

{

IQueryable<TRole> Roles { get; }

}

public interface IRoleStore<TRole> : IDisposable where TRole : class

{

Task<IdentityResult> CreateAsync(TRole role, CancellationToken cancellationToken);

Task<IdentityResult> DeleteAsync(TRole role, CancellationToken cancellationToken);

Task<TRole> FindByIdAsync(string roleId, CancellationToken cancellationToken);

Task<TRole> FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken);

Task<string> GetNormalizedRoleNameAsync(TRole role, CancellationToken cancellationToken);

Task<string> GetRoleIdAsync(TRole role, CancellationToken cancellationToken);

Task<string> GetRoleNameAsync(TRole role, CancellationToken cancellationToken);

Task SetNormalizedRoleNameAsync(TRole role, string normalizedName, CancellationToken cancellationToken);

Task SetRoleNameAsync(TRole role, string roleName, CancellationToken cancellationToken);

Task<IdentityResult> UpdateAsync(TRole role, CancellationToken cancellationToken);

}

其实,也没什么复杂,一个是获得所有预定义角色的列表,另一个是关于角色的增删改查而已,代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91
public class HDRoleStore<TRole> : IQueryableRoleStore<TRole>

where TRole : HDRole, new()

{

/// <summary>

/// 存储所有预定义的角色

/// </summary>

private readonly Dictionary<string, TRole> _roles = new Dictionary<string, TRole>();

/// <summary>

/// 所有角色

/// </summary>

public IQueryable<TRole> Roles

{

get

{

if (_roles.Count == )

{

TRole role = new TRole();

role.Id = "admin";

role.Name = "管理员";

_roles.Add(role.Id, role);

role = new TRole();

role.Id = "user";

role.Name = "用户";

_roles.Add(role.Id, role);

role = new TRole();

role.Id = "power";

role.Name = "大虾";

_roles.Add(role.Id, role);

}

return _roles.Values.AsQueryable();

}

}

public Task<IdentityResult> CreateAsync(TRole role, CancellationToken cancellationToken)

{

_roles[role.Id] = role;

return Task.FromResult(IdentityResult.Success);

}

public Task<IdentityResult> DeleteAsync(TRole role, CancellationToken cancellationToken)

{

if (role == null || !_roles.ContainsKey(role.Id))

{

throw new InvalidOperationException("Unknown role");

}

_roles.Remove(role.Id);

return Task.FromResult(IdentityResult.Success);

}

public void Dispose()

{

}

public Task<TRole> FindByIdAsync(string roleId, CancellationToken cancellationToken)

{

if (_roles.ContainsKey(roleId))

{

return Task.FromResult(_roles[roleId]);

}

return Task.FromResult<TRole>(null);

}

public Task<TRole> FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken)

{

return

Task.FromResult(

Roles.SingleOrDefault(r => String.Equals(r.Name, normalizedRoleName, StringComparison.OrdinalIgnoreCase)));

}

public Task<string> GetNormalizedRoleNameAsync(TRole role, CancellationToken cancellationToken)

{

return Task.FromResult(role.Name);

}

public Task<string> GetRoleIdAsync(TRole role, CancellationToken cancellationToken)

{

return Task.FromResult(role.Id);

}

public Task<string> GetRoleNameAsync(TRole role, CancellationToken cancellationToken)

{

return Task.FromResult(role.Name);

}

public Task SetNormalizedRoleNameAsync(TRole role, string normalizedName, CancellationToken cancellationToken)

{

role.Name = normalizedName;

return Task.FromResult();

}

public Task SetRoleNameAsync(TRole role, string roleName, CancellationToken cancellationToken)

{

role.Name = roleName;

return Task.FromResult();

}

public Task<IdentityResult> UpdateAsync(TRole role, CancellationToken cancellationToken)

{

_roles[role.Id] = role;

return Task.FromResult(IdentityResult.Success);

}

}

可以看到,在第12行,我们的方法里直接写死了角色列表,如果相结合具体的项目的话,我相信叶良辰有一百种方法从各种数据库、配置文件等取得角色列表,而其他程序代码却基本不用更改。

当然,asp.net5自带的默认实现实现了很多其他接口,这里为了最简单起见,只实现了最基本的。

以上就是给大家介绍的asp.net5中用户认证授权(2),希望大家喜欢。后续还会持续更新,请大家持续关注本站。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 asp.net5中用户认证与授权(2) https://www.kuaiidc.com/101519.html

相关文章

发表评论
暂无评论