/// <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 } ); } } } }