/// <summary>
        /// Copy default roles to customer.
        /// Should be used during creation of new customer.
        /// </summary>
        /// <param name="customerId"></param>
        /// <returns></returns>
        private async Task SetCustomerUserRolesFromDefaultRoles(int customerId)
        {
            var includes = new List <Expression <Func <CustomerUserRole, object> > > {
                role => role.Permissions
            };
            var defaultRoles = await customerUserRolesRepository
                               .FindAsync(
                r => !r.CustomerId.HasValue,
                null,
                includes
                );

            foreach (var defaultRole in defaultRoles)
            {
                var customerUserRole = new CustomerUserRole {
                    CustomerId = customerId, Name = defaultRole.Name
                };

                customerUserRolesRepository.Insert(customerUserRole);

                foreach (var permission in defaultRole.Permissions)
                {
                    customerUserRolesPersmissionsRepository.Insert(
                        new CustomerUserRoleToPermissionMapping()
                    {
                        CustomerUserRole = customerUserRole,
                        PermissionCode   = permission.PermissionCode
                    });
                }
            }

            await unitOfWork.SaveAsync();
        }
        private void AddOrUpdateDefaultCustomerRole(
            MaestroDbContext dbContext,
            CustomerUserRole customerUserRole,
            params CustomerUserRolePermissions[] customerUserRolePermissions
            )
        {
            var existedCustomerRole = dbContext
                                      .CustomerUserRoles
                                      .FirstOrDefault(r => r.Name == customerUserRole.Name && r.CustomerId == null);

            if (existedCustomerRole == null)
            {
                dbContext.CustomerUserRoles.Add(customerUserRole);

                foreach (var permission in customerUserRolePermissions)
                {
                    dbContext.CustomerUserRoleToPermissionMappings.Add(
                        new CustomerUserRoleToPermissionMapping()
                    {
                        CustomerUserRole = customerUserRole,
                        PermissionCode   = permission
                    }
                        );
                }
            }
            else
            {
                foreach (var permission in customerUserRolePermissions)
                {
                    if (!dbContext.CustomerUserRoleToPermissionMappings
                        .Any(m => m.CustomerUserRoleId == existedCustomerRole.Id && m.PermissionCode == permission))
                    {
                        dbContext.CustomerUserRoleToPermissionMappings.Add(
                            new CustomerUserRoleToPermissionMapping()
                        {
                            CustomerUserRole = existedCustomerRole,
                            PermissionCode   = permission
                        }
                            );
                    }
                }
            }
        }