Пример #1
0
        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;
            }
                                                           );
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }