Ejemplo n.º 1
0
        public async Task <IActionResult> EditForTenant(long?id, [FromBody] EditForTenantInputModel model)
        {
            //データの入力チェック
            if (!ModelState.IsValid || !id.HasValue)
            {
                return(JsonBadRequest("Invalid inputs."));
            }
            //データの存在チェック
            Role role = await roleRepository.GetRoleForUpdateAsync(id.Value);

            if (role == null)
            {
                return(JsonNotFound($"Role ID {id.Value} is not found."));
            }
            //システムロール、共通テナントロール、他のテナントのテナントロールは編集不可
            if (role.IsSystemRole == true || role.TenantId == null || role.TenantId != CurrentUserInfo.SelectedTenant.Id)
            {
                //参照不可のロールにアクセスしようとしている
                LogWarning($"Role {role.Name} is not allowed to edit by the current user.");
                return(JsonNotFound($"Role Id {id.Value} is not found.")); //エラーメッセージは404と変えない
            }

            role.Name         = model.Name;
            role.DisplayName  = model.DisplayName;
            role.IsSystemRole = false;
            role.SortOrder    = model.SortOrder.Value;

            roleRepository.Update(role, unitOfWork);

            return(JsonOK(new IndexOutputModel(role)));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> EditForTenant(long?id, [FromBody] EditForTenantInputModel model)
        {
            // データの入力チェック
            if (!ModelState.IsValid || !id.HasValue)
            {
                return(JsonBadRequest("Invalid inputs."));
            }

            // データの存在チェック
            Role role = await roleRepository.GetRoleForUpdateAsync(id.Value);

            if (role == null)
            {
                return(JsonNotFound($"Role ID {id.Value} is not found."));
            }

            // データの編集可否チェック
            if (role.IsNotEditable)
            {
                // 名称と表示名の変更は許可しない。ソート順の変更のみ許可する。
                if (role.Name != model.Name || role.DisplayName != model.DisplayName)
                {
                    return(JsonBadRequest($"Role ID {id.Value} is not editable. Only the sort order is allowed to edit."));
                }
            }

            // システムロール、共通テナントロール、他のテナントのテナントロールは編集不可
            if (role.IsSystemRole == true || role.TenantId == null || role.TenantId != CurrentUserInfo.SelectedTenant.Id)
            {
                // 参照不可のロールにアクセスしようとしている
                LogWarning($"Role {role.Name} is not allowed to edit by the current user.");
                return(JsonNotFound($"Role Id {id.Value} is not found.")); // エラーメッセージは404と変えない
            }

            // 同じ名前のロールは登録できないので、確認する
            Role registeredRole = (await roleRepository.GetAllRolesAsync()).FirstOrDefault(r => r.Name == model.Name && r.Id != id.Value);

            if (registeredRole != null)
            {
                return(JsonConflict($"Role {model.Name} already exists: ID = {registeredRole.Id}"));
            }

            role.Name         = model.Name;
            role.DisplayName  = model.DisplayName;
            role.IsSystemRole = false;
            role.SortOrder    = model.SortOrder.Value;

            roleRepository.Update(role, unitOfWork);

            return(JsonOK(new IndexOutputModel(role)));
        }