SEBSERV-287 some fixes with privileges and unique indicator name
This commit is contained in:
parent
0dfde290ca
commit
8b9eebfe5b
4 changed files with 13 additions and 12 deletions
|
@ -45,7 +45,6 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.GetIndicator
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.NewExamTemplate;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.NewExamTemplate;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.SaveExamTemplate;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.SaveExamTemplate;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.CurrentUser;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.CurrentUser;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.CurrentUser.EntityGrantCheck;
|
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.CurrentUser.GrantCheck;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.CurrentUser.GrantCheck;
|
||||||
import ch.ethz.seb.sebserver.gui.table.ColumnDefinition;
|
import ch.ethz.seb.sebserver.gui.table.ColumnDefinition;
|
||||||
import ch.ethz.seb.sebserver.gui.table.EntityTable;
|
import ch.ethz.seb.sebserver.gui.table.EntityTable;
|
||||||
|
@ -192,7 +191,7 @@ public class ExamTemplateForm implements TemplateComposer {
|
||||||
? this.restService.getRestCall(NewExamTemplate.class)
|
? this.restService.getRestCall(NewExamTemplate.class)
|
||||||
: this.restService.getRestCall(SaveExamTemplate.class));
|
: this.restService.getRestCall(SaveExamTemplate.class));
|
||||||
|
|
||||||
final boolean proctoringEnabled = this.restService
|
final boolean proctoringEnabled = !isNew && this.restService
|
||||||
.getBuilder(GetExamTemplateProctoringSettings.class)
|
.getBuilder(GetExamTemplateProctoringSettings.class)
|
||||||
.withURIVariable(API.PARAM_MODEL_ID, entityKey.modelId)
|
.withURIVariable(API.PARAM_MODEL_ID, entityKey.modelId)
|
||||||
.call()
|
.call()
|
||||||
|
@ -200,8 +199,8 @@ public class ExamTemplateForm implements TemplateComposer {
|
||||||
.getOr(false);
|
.getOr(false);
|
||||||
|
|
||||||
final GrantCheck userGrant = currentUser.grantCheck(EntityType.EXAM_TEMPLATE);
|
final GrantCheck userGrant = currentUser.grantCheck(EntityType.EXAM_TEMPLATE);
|
||||||
final EntityGrantCheck userGrantCheck = currentUser.entityGrantCheck(examTemplate);
|
// final EntityGrantCheck userGrantCheck = currentUser.entityGrantCheck(examTemplate);
|
||||||
final boolean modifyGrant = userGrantCheck.m();
|
// final boolean modifyGrant = userGrantCheck.m();
|
||||||
// propagate content actions to action-pane
|
// propagate content actions to action-pane
|
||||||
this.pageService.pageActionBuilder(formContext.clearEntityKeys())
|
this.pageService.pageActionBuilder(formContext.clearEntityKeys())
|
||||||
|
|
||||||
|
@ -228,13 +227,13 @@ public class ExamTemplateForm implements TemplateComposer {
|
||||||
|
|
||||||
.newAction(ActionDefinition.EXAM_TEMPLATE_PROCTORING_ON)
|
.newAction(ActionDefinition.EXAM_TEMPLATE_PROCTORING_ON)
|
||||||
.withEntityKey(entityKey)
|
.withEntityKey(entityKey)
|
||||||
.withExec(this.proctoringSettingsPopup.settingsFunction(this.pageService, modifyGrant))
|
.withExec(this.proctoringSettingsPopup.settingsFunction(this.pageService, userGrant.im()))
|
||||||
.noEventPropagation()
|
.noEventPropagation()
|
||||||
.publishIf(() -> proctoringEnabled && readonly)
|
.publishIf(() -> proctoringEnabled && readonly)
|
||||||
|
|
||||||
.newAction(ActionDefinition.EXAM_TEMPLATE_PROCTORING_OFF)
|
.newAction(ActionDefinition.EXAM_TEMPLATE_PROCTORING_OFF)
|
||||||
.withEntityKey(entityKey)
|
.withEntityKey(entityKey)
|
||||||
.withExec(this.proctoringSettingsPopup.settingsFunction(this.pageService, modifyGrant))
|
.withExec(this.proctoringSettingsPopup.settingsFunction(this.pageService, userGrant.im()))
|
||||||
.noEventPropagation()
|
.noEventPropagation()
|
||||||
.publishIf(() -> !proctoringEnabled && readonly);
|
.publishIf(() -> !proctoringEnabled && readonly);
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ public class AuthorizationServiceImpl implements AuthorizationService {
|
||||||
.forRole(UserRole.SEB_SERVER_ADMIN)
|
.forRole(UserRole.SEB_SERVER_ADMIN)
|
||||||
.withBasePrivilege(PrivilegeType.READ)
|
.withBasePrivilege(PrivilegeType.READ)
|
||||||
.andForRole(UserRole.INSTITUTIONAL_ADMIN)
|
.andForRole(UserRole.INSTITUTIONAL_ADMIN)
|
||||||
.withInstitutionalPrivilege(PrivilegeType.READ)
|
.withInstitutionalPrivilege(PrivilegeType.WRITE)
|
||||||
.andForRole(UserRole.EXAM_ADMIN)
|
.andForRole(UserRole.EXAM_ADMIN)
|
||||||
.withInstitutionalPrivilege(PrivilegeType.WRITE)
|
.withInstitutionalPrivilege(PrivilegeType.WRITE)
|
||||||
.create();
|
.create();
|
||||||
|
|
|
@ -69,8 +69,6 @@ import ch.ethz.seb.sebserver.webservice.servicelayer.lms.impl.moodle.legacy.Mood
|
||||||
@WebServiceProfile
|
@WebServiceProfile
|
||||||
public class ExamDAOImpl implements ExamDAO {
|
public class ExamDAOImpl implements ExamDAO {
|
||||||
|
|
||||||
//public static final String FAILED_TO_LOAD_QUIZ_DATA_MARK = "[FAILED TO LOAD DATA FROM LMS]";
|
|
||||||
|
|
||||||
private final ExamRecordMapper examRecordMapper;
|
private final ExamRecordMapper examRecordMapper;
|
||||||
private final ExamRecordDAO examRecordDAO;
|
private final ExamRecordDAO examRecordDAO;
|
||||||
private final ApplicationEventPublisher applicationEventPublisher;
|
private final ApplicationEventPublisher applicationEventPublisher;
|
||||||
|
@ -979,7 +977,9 @@ public class ExamDAOImpl implements ExamDAO {
|
||||||
.collect(Utils.toSingleton())
|
.collect(Utils.toSingleton())
|
||||||
.getValue();
|
.getValue();
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
log.error("Failed to get former name: examId: {} error: {}", id, e.getMessage());
|
if (log.isDebugEnabled()) {
|
||||||
|
log.warn("Failed to get former name: examId: {} error: {}", id, e.getMessage());
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -534,11 +534,13 @@ public class ExamTemplateDAOImpl implements ExamTemplateDAO {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkUniqueIndicatorName(final IndicatorTemplate indicatorTemplate,
|
private void checkUniqueIndicatorName(
|
||||||
|
final IndicatorTemplate indicatorTemplate,
|
||||||
final Collection<IndicatorTemplate> indicators) {
|
final Collection<IndicatorTemplate> indicators) {
|
||||||
|
|
||||||
// check unique name
|
// check unique name
|
||||||
indicators.stream()
|
indicators.stream()
|
||||||
.filter(it -> Objects.equals(it.name, indicatorTemplate.name))
|
.filter(it -> !Objects.equals(it, indicatorTemplate) && Objects.equals(it.name, indicatorTemplate.name))
|
||||||
.findAny()
|
.findAny()
|
||||||
.ifPresent(it -> {
|
.ifPresent(it -> {
|
||||||
throw new FieldValidationException(
|
throw new FieldValidationException(
|
||||||
|
|
Loading…
Reference in a new issue