Exemplo n.º 1
0
        public async Task <Tuple <bool, string[]> > UpdateRoleAsync(ApplicationRole role, IEnumerable <string> claims)
        {
            if (claims != null)
            {
                var invalidClaims = claims.Where(c => ApplicationPermissions.GetPermissionByValue(c) == null).ToArray();
                if (invalidClaims.Any())
                {
                    return(Tuple.Create(false, new string[] { "The following claim types are invalid: " + string.Join(", ", invalidClaims) }));
                }
            }

            var result = await _roleManager.UpdateAsync(role);

            if (!result.Succeeded)
            {
                return(Tuple.Create(false, result.Errors.Select(e => e.Description).ToArray()));
            }

            if (claims != null)
            {
                var roleClaims      = (await _roleManager.GetClaimsAsync(role)).Where(c => c.Type == CustomClaimTypes.Permission);
                var roleClaimValues = roleClaims.Select(c => c.Value).ToArray();

                var claimsToRemove = roleClaimValues.Except(claims).ToArray();
                var claimsToAdd    = claims.Except(roleClaimValues).Distinct().ToArray();

                if (claimsToRemove.Any())
                {
                    foreach (string claim in claimsToRemove)
                    {
                        result = await _roleManager.RemoveClaimAsync(role, roleClaims.FirstOrDefault(c => c.Value == claim));

                        if (!result.Succeeded)
                        {
                            return(Tuple.Create(false, result.Errors.Select(e => e.Description).ToArray()));
                        }
                    }
                }

                if (claimsToAdd.Any())
                {
                    foreach (string claim in claimsToAdd)
                    {
                        result = await _roleManager.AddClaimAsync(role, new Claim(CustomClaimTypes.Permission, ApplicationPermissions.GetPermissionByValue(claim)));

                        if (!result.Succeeded)
                        {
                            return(Tuple.Create(false, result.Errors.Select(e => e.Description).ToArray()));
                        }
                    }
                }
            }

            return(Tuple.Create(true, new string[] { }));
        }
Exemplo n.º 2
0
        public async Task SeedAsync()
        {
            await _context.Database.MigrateAsync().ConfigureAwait(false);

            if (!await _context.Users.AnyAsync())
            {
                const string adminRoleName = "administrator";
                const string userRoleName  = "user";

                await ensureRoleAsync(adminRoleName, "Default administrator", ApplicationPermissions.GetAllPermissionValues());
                await ensureRoleAsync(userRoleName, "Default user", new string[] { });

                await createUserAsync("admin", "admini123", "Inbuilt Administrator", "admin", "+1 (123) 000-0000", new string[] { adminRoleName });
                await createUserAsync("user", "user123", "Inbuilt Standard User", "user", "+1 (123) 000-0001", new string[] { userRoleName });
            }



            if (!await _context.Customers.AnyAsync() && !await _context.ProductCategories.AnyAsync())
            {
                Customer cust_1 = new Customer
                {
                    Name         = "Ebenezer Monney",
                    Email        = "*****@*****.**",
                    Gender       = Gender.Male,
                    DateCreated  = DateTime.UtcNow,
                    DateModified = DateTime.UtcNow
                };

                Customer cust_2 = new Customer
                {
                    Name         = "Itachi Uchiha",
                    Email        = "*****@*****.**",
                    PhoneNumber  = "+81123456789",
                    Address      = "Some fictional Address, Street 123, Konoha",
                    City         = "Konoha",
                    Gender       = Gender.Male,
                    DateCreated  = DateTime.UtcNow,
                    DateModified = DateTime.UtcNow
                };

                Customer cust_3 = new Customer
                {
                    Name         = "John Doe",
                    Email        = "*****@*****.**",
                    PhoneNumber  = "+18585858",
                    Address      = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio.
                    Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet",
                    City         = "Lorem Ipsum",
                    Gender       = Gender.Male,
                    DateCreated  = DateTime.UtcNow,
                    DateModified = DateTime.UtcNow
                };

                Customer cust_4 = new Customer
                {
                    Name         = "Jane Doe",
                    Email        = "*****@*****.**",
                    PhoneNumber  = "+18585858",
                    Address      = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio.
                    Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet",
                    City         = "Lorem Ipsum",
                    Gender       = Gender.Male,
                    DateCreated  = DateTime.UtcNow,
                    DateModified = DateTime.UtcNow
                };



                ProductCategory prodCat_1 = new ProductCategory
                {
                    Name         = "None",
                    Description  = "Default category. Products that have not been assigned a category",
                    DateCreated  = DateTime.UtcNow,
                    DateModified = DateTime.UtcNow
                };



                Product prod_1 = new Product
                {
                    Name            = "BMW M6",
                    Description     = "Yet another masterpiece from the world's best car manufacturer",
                    BuyingPrice     = 109775,
                    SellingPrice    = 114234,
                    UnitsInStock    = 12,
                    IsActive        = true,
                    ProductCategory = prodCat_1,
                    DateCreated     = DateTime.UtcNow,
                    DateModified    = DateTime.UtcNow
                };

                Product prod_2 = new Product
                {
                    Name            = "Nissan Patrol",
                    Description     = "A true man's choice",
                    BuyingPrice     = 78990,
                    SellingPrice    = 86990,
                    UnitsInStock    = 4,
                    IsActive        = true,
                    ProductCategory = prodCat_1,
                    DateCreated     = DateTime.UtcNow,
                    DateModified    = DateTime.UtcNow
                };



                Order ordr_1 = new Order
                {
                    Discount     = 500,
                    Cashier      = await _context.Users.FirstAsync(),
                    Customer     = cust_1,
                    DateCreated  = DateTime.UtcNow,
                    DateModified = DateTime.UtcNow,
                    OrderDetails = new List <OrderDetail>()
                    {
                        new OrderDetail()
                        {
                            UnitPrice = prod_1.SellingPrice, Quantity = 1, Product = prod_1
                        },
                        new OrderDetail()
                        {
                            UnitPrice = prod_2.SellingPrice, Quantity = 1, Product = prod_2
                        },
                    }
                };

                Order ordr_2 = new Order
                {
                    Cashier      = await _context.Users.FirstAsync(),
                    Customer     = cust_2,
                    DateCreated  = DateTime.UtcNow,
                    DateModified = DateTime.UtcNow,
                    OrderDetails = new List <OrderDetail>()
                    {
                        new OrderDetail()
                        {
                            UnitPrice = prod_2.SellingPrice, Quantity = 1, Product = prod_2
                        },
                    }
                };


                _context.Customers.Add(cust_1);
                _context.Customers.Add(cust_2);
                _context.Customers.Add(cust_3);
                _context.Customers.Add(cust_4);

                _context.Products.Add(prod_1);
                _context.Products.Add(prod_2);

                _context.Orders.Add(ordr_1);
                _context.Orders.Add(ordr_2);

                await _context.SaveChangesAsync();
            }
        }
Exemplo n.º 3
0
        public async Task <Tuple <bool, string[]> > CreateRoleAsync(ApplicationRole role, IEnumerable <string> claims)
        {
            if (claims == null)
            {
                claims = new string[] { }
            }
            ;

            var invalidClaims = claims.Where(c => ApplicationPermissions.GetPermissionByValue(c) == null).ToArray();

            if (invalidClaims.Any())
            {
                return(Tuple.Create(false, new string[] { "The following claim types are invalid: " + string.Join(", ", invalidClaims) }));
            }

            var result = await _roleManager.CreateAsync(role);

            if (!result.Succeeded)
            {
                return(Tuple.Create(false, result.Errors.Select(e => e.Description).ToArray()));
            }

            role = await _roleManager.FindByNameAsync(role.Name);

            foreach (string claim in claims.Distinct())
            {
                result = await this._roleManager.AddClaimAsync(role, new Claim(CustomClaimTypes.Permission, ApplicationPermissions.GetPermissionByValue(claim)));

                if (!result.Succeeded)
                {
                    await DeleteRoleAsync(role);

                    return(Tuple.Create(false, result.Errors.Select(e => e.Description).ToArray()));
                }
            }

            return(Tuple.Create(true, new string[] { }));
        }
Exemplo n.º 4
0
        public async Task <ApiResponse> CreateRoleAsync([FromBody] RoleDto newRole)
        {
            try
            {
                // first make sure the role doesn't already exist
                if (_roleManager.Roles.Any(r => r.Name == newRole.Name))
                {
                    return(new ApiResponse(400, "Role already exists"));
                }

                // Create the role
                var result = await _roleManager.CreateAsync(new IdentityRole <Guid>(newRole.Name));

                if (!result.Succeeded)
                {
                    string errorMessage = result.Errors.Select(x => x.Description).Aggregate((i, j) => i + " - " + j);
                    return(new ApiResponse(500, errorMessage));
                }

                // Re-create the permissions
                IdentityRole <Guid> role = await _roleManager.FindByNameAsync(newRole.Name);

                foreach (string claim in newRole.Permissions)
                {
                    var resultAddClaim = await _roleManager.AddClaimAsync(role, new Claim(ClaimConstants.Permission, ApplicationPermissions.GetPermissionByName(claim)));

                    if (!resultAddClaim.Succeeded)
                    {
                        await _roleManager.DeleteAsync(role);
                    }
                }
            }
            catch (Exception ex)
            {
                return(new ApiResponse(500, ex.Message));
            }

            return(new ApiResponse(200));
        }
Exemplo n.º 5
0
        public async Task <ApiResponse> UpdateRoleAsync([FromBody] RoleDto newRole)
        {
            try
            {
                // first make sure the role already exist
                if (!_roleManager.Roles.Any(r => r.Name == newRole.Name))
                {
                    return(new ApiResponse(400, "This role doesn't exists"));
                }

                // Create the permissions
                IdentityRole <Guid> identityRole = await _roleManager.FindByNameAsync(newRole.Name);

                var claims = await _roleManager.GetClaimsAsync(identityRole);

                var permissions = claims.Where(x => x.Type == ClaimConstants.Permission).Select(x => x.Value).ToList();

                foreach (var permission in permissions)
                {
                    await _roleManager.RemoveClaimAsync(identityRole, new Claim(ClaimConstants.Permission, permission));
                }

                foreach (string claim in newRole.Permissions)
                {
                    var result = await _roleManager.AddClaimAsync(identityRole, new Claim(ClaimConstants.Permission, ApplicationPermissions.GetPermissionByName(claim)));

                    if (!result.Succeeded)
                    {
                        await _roleManager.DeleteAsync(identityRole);
                    }
                }
            }
            catch (Exception ex)
            {
                return(new ApiResponse(500, ex.Message));
            }
            return(new ApiResponse(200));
        }
Exemplo n.º 6
0
        public async Task <ApiResponse> GetRoleAsync(string roleName)
        {
            RoleDto             roleDto;
            IdentityRole <Guid> identityRole;

            // get paginated list of users
            try
            {
                identityRole = await _roleManager.FindByNameAsync(roleName);
            }
            catch (Exception ex)
            {
                throw new Exception(null, ex);
            }

            try
            {
                var claims = await _roleManager.GetClaimsAsync(identityRole);

                var permissions = claims.Where(x => x.Type == "permission").Select(x => ApplicationPermissions.GetPermissionByValue(x.Value).Name).ToList();

                roleDto = new RoleDto
                {
                    Name        = roleName,
                    Permissions = permissions
                };
            }
            catch (Exception ex)
            {
                throw new Exception(null, ex);
            }

            return(new ApiResponse(200, "Role fetched", roleDto));
        }
Exemplo n.º 7
0
        public async Task <ApiResponse> GetRoles([FromQuery] int pageSize = 10, [FromQuery] int pageNumber = 0)
        {
            var roleDtoList = new List <RoleDto>();
            List <IdentityRole <Guid> > listResponse;

            // get paginated list of roles
            try
            {
                var roleList = _roleManager.Roles.AsQueryable();
                listResponse = roleList.OrderBy(x => x.Id).Skip(pageNumber * pageSize).Take(pageSize).ToList();
            }
            catch (Exception ex)
            {
                throw new Exception(null, ex);
            }

            try
            {
                foreach (var role in listResponse)
                {
                    var claims = await _roleManager.GetClaimsAsync(role);

                    var permissions = claims.Where(x => x.Type == "permission").Select(x => ApplicationPermissions.GetPermissionByValue(x.Value).Name).ToList();

                    roleDtoList.Add(new RoleDto
                    {
                        Name        = role.Name,
                        Permissions = permissions
                    });;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(null, ex);
            }

            return(new ApiResponse(200, "Roles list fetched", roleDtoList));
        }
Exemplo n.º 8
0
        public ApiResponse GetPermissions()
        {
            var permissions = ApplicationPermissions.GetAllPermissionNames();

            return(new ApiResponse(200, "Permissions list fetched", permissions));
        }
Exemplo n.º 9
0
        public async Task SeedAsync()
        {
            await _context.Database.MigrateAsync().ConfigureAwait(false);

            var result = await _context.Users.AnyAsync();

            if (!await _context.Users.AnyAsync())
            {
                _logger.LogInformation("Generating inbuilt accounts");

                const string adminRoleName = "administrator";
                const string userRoleName  = "user";

                await EnsureRoleAsync(adminRoleName, "Default administrator", ApplicationPermissions.GetAllPermissionValues());
                await EnsureRoleAsync(userRoleName, "Default user", new string[] { });

                await CreateUserAsync("admin", "tempP@ss123", "Administrator", "*****@*****.**", "+1 (123) 000-0000", new string[] { adminRoleName });
                await CreateUserAsync("Nyasha", "tempP@ss123", "Standard User", "*****@*****.**", "+1 (123) 000-0001", new string[] { userRoleName });
                await CreateUserAsync("Grace", "tempP@ss123", "Administrator", "*****@*****.**", "+1 (123) 000-0001", new string[] { adminRoleName });
                await CreateUserAsync("Martin", "tempP@ss123", "Standard User", "*****@*****.**", "+1 (123) 000-0001", new string[] { userRoleName });
                await CreateUserAsync("User1", "tempP@ss123", "Standard User", "*****@*****.**", "+1 (123) 000-0001", new string[] { userRoleName });
                await CreateUserAsync("User2", "tempP@ss123", "Standard User", "*****@*****.**", "+1 (123) 000-0001", new string[] { userRoleName });
                await CreateUserAsync("User3", "tempP@ss123", "Standard User", "*****@*****.**", "+1 (123) 000-0001", new string[] { userRoleName });

                _logger.LogInformation("Inbuilt account generation has completed");
            }

            if (!await _context.ProjectSources.AnyAsync())
            {
                _logger.LogInformation("Seeding initial data");
                var source1 = new ProjectSource {
                    Name = "Facebook"
                };
                var source2 = new ProjectSource {
                    Name = "Google"
                };
                var source3 = new ProjectSource {
                    Name = "Reference"
                };
                var source4 = new ProjectSource {
                    Name = "Website"
                };

                _context.ProjectSources.AddRange(source4, source3, source2, source1);
                _logger.LogInformation("Seeding initial data completed");
            }

            if (!await _context.ProjectStatuses.AnyAsync())
            {
                _logger.LogInformation("Seeding initial data");

                var pS1 = new ProjectStatus {
                    Name = "Parked"
                };
                var pS2 = new ProjectStatus {
                    Name = "In Progress"
                };
                var pS3 = new ProjectStatus {
                    Name = "Awaiting Approval"
                };
                var pS4 = new ProjectStatus {
                    Name = "Completed"
                };

                _context.ProjectStatuses.AddRange(pS4, pS3, pS2, pS1);
                await _context.SaveChangesAsync();

                _logger.LogInformation("Seeding initial data completed");
            }
        }
Exemplo n.º 10
0
        virtual public async Task SeedAsync()
        {
            await _context.Database.MigrateAsync().ConfigureAwait(false);

            //if (!await _context.Users.AnyAsync())
            //{
            try
            {
                _logger.LogInformation("Generating inbuilt accounts");
                const string superAdminRoleName = "Super Administrators";
                //const string userRoleName = "user";

                await EnsureRoleAsync(superAdminRoleName, "Default super administrators", ApplicationPermissions.GetAllPermissionValues());

                //await EnsureRoleAsync(userRoleName, "Default user", new string[] { });

                //await CreateUserAsync("admin", "P@55w0rdtest", "Inbuilt Administrator", "*****@*****.**", "0911205712", new string[] { adminRoleName });
                //await CreateUserAsync("user", "P@55w0rdtest", "Inbuilt Standard User", "*****@*****.**", "0911205712", new string[] { userRoleName });
                await CreateUserAsync("SuperAdmin", "P@55w0rdtest", "Inbuilt Super Administrator", "*****@*****.**", "0911205712", new string[] { superAdminRoleName });

                _logger.LogInformation("Inbuilt account generation completed");
            }
            catch (Exception ex)
            {
                string s = ex.Message;
                throw new Exception(ex.Message);
            }
            //}
        }