public static async Task Main(string[] args) { await Goblin.Core.Web.Setup.ProgramHelper.Main(args, webHostBuilder => { webHostBuilder.UseStartup <Startup>(); }, scope => { // Register Role and Permission var roleModel = new GoblinIdentityUpsertRoleModel { Name = "Admin", Permissions = new List <string> { "Member Manager", "Blog Manager", "Work Manager", "Tech Manager" } }; var upsertRoleTask = GoblinIdentityHelper.UpsertRoleAsync(roleModel); upsertRoleTask.Wait(); var upsertRoleResult = upsertRoleTask.Result; } ); }
public static async Task <GoblinIdentityRoleModel> UpsertRoleAsync(GoblinIdentityUpsertRoleModel model, CancellationToken cancellationToken = default) { ValidationHelper.Validate <GoblinIdentityUpsertRoleModelValidator, GoblinIdentityUpsertRoleModel>(model); try { var endpoint = GetRequest(model.LoggedInUserId).AppendPathSegment(GoblinIdentityEndpoints.UpsertRole); var roleModel = await endpoint .PostJsonAsync(model, cancellationToken : cancellationToken) .ReceiveJson <GoblinIdentityRoleModel>() .ConfigureAwait(true); return(roleModel); } catch (FlurlHttpException ex) { await FlurlHttpExceptionHelper.HandleErrorAsync(ex).ConfigureAwait(true); return(null); } }
public async Task <GoblinIdentityRoleModel> UpsertAsync(GoblinIdentityUpsertRoleModel model, CancellationToken cancellationToken = default) { using var transaction = await GoblinUnitOfWork.BeginTransactionAsync(cancellationToken).ConfigureAwait(true); // Handle Role var roleEntity = await _roleRepo .Get(x => x.Name == model.Name) .FirstOrDefaultAsync(cancellationToken) .ConfigureAwait(true); if (roleEntity == null) { roleEntity = new RoleEntity { Name = model.Name }; _roleRepo.Add(roleEntity); } // Save Change await GoblinUnitOfWork.SaveChangesAsync(cancellationToken); // Handle Permission if (model.Permissions?.Any() == true) { model.Permissions = model.Permissions.Select(x => x.Trim()).ToList(); var existsPermissionEntities = await _permissionRepo .Get(x => model.Permissions.Contains(x.Name)) .ToListAsync(cancellationToken).ConfigureAwait(true); var existsPermissions = existsPermissionEntities.Select(x => x.Name).ToList(); foreach (var permission in model.Permissions) { if (!existsPermissions.Contains(permission)) { var permissionEntity = new PermissionEntity { Name = permission }; _permissionRepo.Add(permissionEntity); existsPermissionEntities.Add(permissionEntity); } } // Save Change await GoblinUnitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(true); // Relationship Role and Permission var rolePermissions = await _rolePermissionRepo.Get(x => x.RoleId == roleEntity.Id) .ToListAsync(cancellationToken) .ConfigureAwait(true); foreach (var permissionEntity in existsPermissionEntities) { if (rolePermissions.Any(x => x.PermissionId == permissionEntity.Id)) { continue; } _rolePermissionRepo.Add(new RolePermissionEntity { RoleId = roleEntity.Id, PermissionId = permissionEntity.Id }); } // Save Change await GoblinUnitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(true); } transaction.Commit(); var roleModel = await GetAsync(roleEntity.Name, cancellationToken).ConfigureAwait(true); return(roleModel); }
public async Task <IActionResult> UpsertRole([FromBody] GoblinIdentityUpsertRoleModel model, CancellationToken cancellationToken = default) { var roleModel = await _roleService.UpsertAsync(model, cancellationToken); return(Created(Url.Action("GetRole", new { roleModel.Name }), roleModel)); }