ASP ApplicationUser 角色导航的 MVC 构建抛出警告 属性?
ASP MVC Build Throwing Warning For ApplicationUser Roles Navigation Property?
我有以下 ApplicationUser 模型:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<ApplicationRole> Roles { get; set; }
public bool HasRole(string _role)
{
return Roles.Any(r => r.Name == _role);
}
public bool HasPermission(string _permission)
{
return Roles.Any(r => r.Permissions
.Any(p => p.Name == _permission));
}
}
但是当我 运行 构建时,我收到以下警告消息:
ApplicationUser.Roles hides inherited member
'IdentityUser<string, IdentityUserLogin,IdentityUserRole, IdentityUserClaim>.Roles.
To make the current member override that implementation, add the overide keyword. Otherwise
add the new keyword.
我的实施有问题还是应该以不同的方式进行?我添加了角色导航 属性 以便我可以实施 HasRole 和 HasPermission 方法。
我的 Permission 和 ApplicationRole 模型实现如下:
public class Permission
{
public byte Id { get; set; }
public string Name { get; set; }
public virtual List<ApplicationRole> Roles { get; set; }
}
public class ApplicationRole : IdentityRole
{
public ApplicationRole() : base() { }
public ApplicationRole(string name) : base(name) { }
public virtual ICollection<Permission> Permissions { get; set; }
public bool IsPermissionInRole(string _permission)
{
return Permissions.Any(p => p.Name == _permission);
}
}
我对 ASP.NET 身份 了解不多。但经过一番搜索,我可以给你粗略的答案。 IdentityUser 应该有属性 Roles 继承 IdentityUserRole 而不是 IdentityRole .我认为这个模型与 IdentityUsers 和 IdentityRoles 相关。所以,你应该做的是创建 ApplicationUserRole class 继承 IdentityUserRole:
public class ApplicationUserRole : IdentityUserRole
{
public ApplicationUserRole()
: base()
{ }
public virtual ApplicationRole Role { get; set; }
}
从 IdentityRole<string, ApplicationUserRole>
继承您的 ApplicationRole:
public class ApplicationRole
: IdentityRole<string, ApplicationUserRole>
{
}
然后在您的 ApplicationUser class 中使用此 class。要使用 ApplicationUserRole,您需要从 IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>
继承 ApplicationUser,而不是 IdentityUser
public class ApplicationUser
: IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>
{
public string FirstName { get; set; }
public string LastName { get; set; }
.............
}
最后,将 HasPermission 的 ApplicationUser 方法更改为:
public bool HasPermission(string _permission)
{
return Roles.Any(r => r.Role.IsPermissionInRole(_permission));
}
我再次声明,这是粗略的答案。有关扩展身份模型的更多信息,请参阅 this code project article。
我有以下 ApplicationUser 模型:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<ApplicationRole> Roles { get; set; }
public bool HasRole(string _role)
{
return Roles.Any(r => r.Name == _role);
}
public bool HasPermission(string _permission)
{
return Roles.Any(r => r.Permissions
.Any(p => p.Name == _permission));
}
}
但是当我 运行 构建时,我收到以下警告消息:
ApplicationUser.Roles hides inherited member
'IdentityUser<string, IdentityUserLogin,IdentityUserRole, IdentityUserClaim>.Roles.
To make the current member override that implementation, add the overide keyword. Otherwise
add the new keyword.
我的实施有问题还是应该以不同的方式进行?我添加了角色导航 属性 以便我可以实施 HasRole 和 HasPermission 方法。
我的 Permission 和 ApplicationRole 模型实现如下:
public class Permission
{
public byte Id { get; set; }
public string Name { get; set; }
public virtual List<ApplicationRole> Roles { get; set; }
}
public class ApplicationRole : IdentityRole
{
public ApplicationRole() : base() { }
public ApplicationRole(string name) : base(name) { }
public virtual ICollection<Permission> Permissions { get; set; }
public bool IsPermissionInRole(string _permission)
{
return Permissions.Any(p => p.Name == _permission);
}
}
我对 ASP.NET 身份 了解不多。但经过一番搜索,我可以给你粗略的答案。 IdentityUser 应该有属性 Roles 继承 IdentityUserRole 而不是 IdentityRole .我认为这个模型与 IdentityUsers 和 IdentityRoles 相关。所以,你应该做的是创建 ApplicationUserRole class 继承 IdentityUserRole:
public class ApplicationUserRole : IdentityUserRole
{
public ApplicationUserRole()
: base()
{ }
public virtual ApplicationRole Role { get; set; }
}
从 IdentityRole<string, ApplicationUserRole>
继承您的 ApplicationRole:
public class ApplicationRole
: IdentityRole<string, ApplicationUserRole>
{
}
然后在您的 ApplicationUser class 中使用此 class。要使用 ApplicationUserRole,您需要从 IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>
继承 ApplicationUser,而不是 IdentityUser
public class ApplicationUser
: IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>
{
public string FirstName { get; set; }
public string LastName { get; set; }
.............
}
最后,将 HasPermission 的 ApplicationUser 方法更改为:
public bool HasPermission(string _permission)
{
return Roles.Any(r => r.Role.IsPermissionInRole(_permission));
}
我再次声明,这是粗略的答案。有关扩展身份模型的更多信息,请参阅 this code project article。