I am trying to seed users and permissions but no matter what I do I get the following error.
But when you look below at my code not one method is a static method so why on earth is visual studio claiming its a static class I dont want to it to be a static one?.
Severity Code Description Project File Line Suppression StateError CS1106 Extension method must be defined in a non-generic static class Warehouse.Web D:\GitMaster\WareHouseCrm\Warehouse.Web\Helpers\SeedUsers.cs 14 Active
Line 14 happens to be this line
public class SeedUsers
namespace WarehouseCrm.Web.Helpers
{
public class SeedUsers
{
private WarehouseDBContext _context;
public SeedUsers(WarehouseDBContext context)
{
_context = context;
}
public async void SeedRoles()
{
var roleStore = new RoleStore<IdentityRole>(_context);
await roleStore.CreateAsync(new IdentityRole { Name = "admin", NormalizedName = "admin" });
await roleStore.CreateAsync(new IdentityRole { Name = "manager", NormalizedName = "manager" });
await roleStore.CreateAsync(new IdentityRole { Name = "agent", NormalizedName = "agent" });
}
public async void SeedAdminUser(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager, RoleStore<IdentityRole> roleStore, UserStore<ApplicationUser> userStore)
{
var user = new ApplicationUser
{
UserName = "testmanager@outlook.com",
NormalizedUserName = "testmanager@outlook.com",
Email = "testmanager@outlook.com",
NormalizedEmail = "testmanager@outlook.com",
FirstName = "test",
LastName = "manager",
EmailConfirmed = true,
LockoutEnabled = false,
SecurityStamp = Guid.NewGuid().ToString()
};
var password = new PasswordHasher<ApplicationUser>();
var hashed = password.HashPassword(user, "Test12345!");
user.PasswordHash = hashed;
await userStore.CreateAsync(user);
await userStore.AddToRoleAsync(user, "admin");
}
public async void SeedUser1(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager, RoleStore<IdentityRole> roleStore, UserStore<ApplicationUser> userStore)
{
var user = new ApplicationUser
{
UserName = "user1@test.com",
NormalizedUserName = "user1@test.com",
Email = "user1@test.com",
NormalizedEmail = "user1@test.com",
FirstName = "Martha",
LastName = "Jones",
EmailConfirmed = true,
LockoutEnabled = false,
SecurityStamp = Guid.NewGuid().ToString()
};
var password = new PasswordHasher<ApplicationUser>();
var hashed = password.HashPassword(user, "Test12345!");
user.PasswordHash = hashed;
await userStore.CreateAsync(user);
await userStore.AddToRoleAsync(user, "agent");
}
public async void SeedUser2(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager, RoleStore<IdentityRole> roleStore, UserStore<ApplicationUser> userStore)
{
var user = new ApplicationUser
{
UserName = "user2@test.com",
NormalizedUserName = "user2@test.com",
Email = "user2@test.com",
NormalizedEmail = "user2@test.com",
FirstName = "Matt",
LastName = "Smith",
EmailConfirmed = true,
LockoutEnabled = false,
SecurityStamp = Guid.NewGuid().ToString()
};
var password = new PasswordHasher<ApplicationUser>();
var hashed = password.HashPassword(user, "Test12345!");
user.PasswordHash = hashed;
await userStore.CreateAsync(user);
await userStore.AddToRoleAsync(user, "agent");
}
private async Task SeedClaimsForSuperAdminAsync(this RoleManager<IdentityRole> roleManager)
{
var adminRole =await roleManager.FindByNameAsync("admin");
await AddPermissionClaim(roleManager,adminRole, "StockItems");
}
public List<string> GeneratePermissionsForModule(string module)
{
return new List<string>()
{$"Permissions.{module}.Create",$"Permissions.{module}.View",$"Permissions.{module}.Edit",$"Permissions.{module}.Delete",
};
}
public async Task AddPermissionClaim( RoleManager<IdentityRole> roleManager, IdentityRole role, string module)
{
var allClaims = await roleManager.GetClaimsAsync(role);
var allPermissions = GeneratePermissionsForModule(module);
foreach (var permission in allPermissions)
{
if (!allClaims.Any(a => a.Type == "Permission" && a.Value == permission))
{
await roleManager.AddClaimAsync(role, new Claim("Permission", permission));
}
}
}
}
}