Skip to content

Commit

Permalink
Merge pull request #265 from AberystwythSystemsBiology/feature/rbac0
Browse files Browse the repository at this point in the history
Feature/rbac0
  • Loading branch information
KeironO authored Aug 8, 2023
2 parents 0e26f17 + 5e062cc commit 4872b72
Show file tree
Hide file tree
Showing 127 changed files with 2,769 additions and 946 deletions.
Binary file modified .DS_Store
Binary file not shown.
Binary file modified services/web/.DS_Store
Binary file not shown.
4 changes: 3 additions & 1 deletion services/web/app/admin/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,9 @@ def func_audit_trail(
# continue

chgset = {
key: "[%s -> %s]" % (chgset[key][0], chgset[key][1]) for key in chgset
key: "[%s -> %s]" % (chgset[key][0], chgset[key][1])
for key in chgset
if key not in ["collection_id"]
}

# -- Get transaction and updated object data
Expand Down
213 changes: 157 additions & 56 deletions services/web/app/admin/forms/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
SelectField,
SelectMultipleField,
)
from wtforms.validators import DataRequired, Email, EqualTo
from wtforms.validators import DataRequired, Email, EqualTo, Length
from ...validators import validate_against_text

from ...auth.enums import Title, AccountType
Expand All @@ -38,6 +38,8 @@
from ...sample.enums import (
SampleBaseType,
FluidSampleType,
CellSampleType,
MolecularSampleType,
ContainerBaseType,
FluidContainer,
CellContainer,
Expand All @@ -47,7 +49,6 @@


class UserAccountRegistrationForm(FlaskForm):

title = SelectField("Title", validators=[DataRequired()], choices=Title.choices())

first_name = StringField("First Name", validators=[DataRequired()])
Expand Down Expand Up @@ -97,7 +98,6 @@ class StaticForm(FlaskForm):


def AdminUserAccountEditForm(sites=[], data={}) -> FlaskForm:
# print("data", data)
if "account_type" in data:
data["account_type"] = AccountType(data["account_type"]).name

Expand Down Expand Up @@ -125,18 +125,26 @@ class StaticForm(FlaskForm):
"Account Type", validators=[DataRequired()], choices=AccountType.choices()
)

settings = FieldList(FormField(UserSettings), min_entries=1)
use_template = SelectField(
"Choose user setting from template",
# coerce=int,
choices=[],
default=None,
render_kw={"size": "1", "class": "form-control bd-light alert-info"},
)

submit = SubmitField("Update")
set_to_template = SubmitField(
"Set", render_kw={"class": "btn btn-link float-right top10"}
)

def validate(self):
for entry in self.settings.entries:
print("access_level", entry.access_level.data)
print("sites", entry.site_choices.data)
settings = FieldList(FormField(UserSettings), min_entries=1)
submit = SubmitField(
"Update", render_kw={"class": "btn btn-success float-right top10"}
)

# if not FlaskForm.validate(self):
# print("ok")
# return False
def validate(self):
if self.set_to_template.data and not self.set_to_template.data:
return False

if (
UserAccount.query.filter_by(email=self.email.data)
Expand All @@ -146,7 +154,6 @@ def validate(self):
self.email.errors.append("Email address already in use.")
flash("Email address already in use.")
return False
# raise ValidationError("Email address already in use.")

return True

Expand All @@ -168,82 +175,176 @@ class Meta:
site_choices = SelectMultipleField(
"Work Sites",
choices=[],
render_kw={"size": "1", "class": "selectpicker form-control"},
coerce=int,
render_kw={"size": "1", "class": "selectpicker form-control wd=0.6"},
)

site_selected = TextAreaField(
"Current",
render_kw={"readonly": True, "rows": 5, "class": "form-control bd-light"},
)
# site_default = SelectField(
# "Default working site",
# choices=[], coerce=int,
# render_kw={"size": "1", "class": "form-control bd-light"},
# )

# -- Consent
consent_template_choices = SelectMultipleField(
"Consent template choices",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "selectpicker form-control wd=0.6"},
)
consent_template_selected = TextAreaField(
"Current choice",
render_kw={"readonly": True, "rows": 5, "class": "form-control bd-light"},
)
consent_template_default = SelectField(
"Default working consent template",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "form-control bd-light"},
)

# site_default = StringField("Default working site")
# -- Study protocols
study_protocol_choices = SelectMultipleField(
"Study choices",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "selectpicker form-control wd=0.6"},
)

# consent_template_default = SelectField("Default working consent template")
# consent_template_choices = SelectMultipleField(
# "Consent template choices", choices=[])
#
# study_protocol_default = StringField("Default project/study protocol")#, choices=stu_protocols)
# study_protocol_choices = SelectMultipleField(
# "Study/Project Protocol choices", choices=[])#, choices=stu_protocols),
#
# acquisition_protocol_default = StringField(
# "Default project/study protocol")
#
# acquisition_protocol_choices = SelectMultipleField(
# "Sample Acquisition Protocol choices",
# choices=[])
#
# # sample_basetype_default = StringField("Default sample base type")
# sample_basetype_choices = SelectMultipleField(
# "Sample base type choices", choices=SampleBaseType.choices()),
study_protocol_selected = TextAreaField(
"Current choice",
render_kw={"readonly": True, "rows": 5, "class": "form-control bd-light"},
)
study_protocol_default = SelectField(
"Default study",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "form-control bd-light"},
)

# sample_basetype_default = StringField(
# "Default sample base type",
# choices=SampleBaseType.choices(),
# default="FLU")
# -- sample acquisition protocols
collection_protocol_choices = SelectMultipleField(
"Sample acquisition protocol choices",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "selectpicker form-control wd=0.6"},
)
collection_protocol_selected = TextAreaField(
"Current choice",
render_kw={"readonly": True, "rows": 5, "class": "form-control bd-light"},
)
collection_protocol_default = SelectField(
"Default sample acquisition protocol",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "form-control bd-light"},
)

# -- sample processing protocols
processing_protocol_choices = SelectMultipleField(
"Sample processing protocol choices",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "selectpicker form-control wd=0.6"},
)
processing_protocol_selected = TextAreaField(
"Current choice",
render_kw={"readonly": True, "rows": 5, "class": "form-control bd-light"},
)
processing_protocol_default = SelectField(
"Default sample processing protocol",
choices=[],
coerce=int,
render_kw={"size": "1", "class": "form-control bd-light"},
)

sample_basetype_default = SelectField(
"Default sample base type",
choices=SampleBaseType.choices(),
default="FLU",
render_kw={"size": "1", "class": "form-control bd-light"},
)
#
# sample_basetype_choices = SelectMultipleField(
# "Sample base type choices",
# choices=SampleBaseType.choices(),
# default=[]
# )
#
# sample_flu_type_default = SelectField(
# "Default sample fluid type",
# choices=FluidSampleType.choices(),
# default='BLD')
sample_flu_type_default = SelectField(
"Default sample fluid type",
choices=FluidSampleType.choices(),
default="BLD",
render_kw={"size": "1", "class": "form-control bd-light"},
)

# sample_flu_type_choices = SelectMultipleField(
# "Sample fluid types",
# choices=FluidSampleType.choices(),
# default=[])
#
# container_basetype_default = SelectField(
# "Default Container Base Type",
# choices=ContainerBaseType.choices(),
# default = "LTS")

sample_cel_type_default = SelectField(
"Default solid sample type",
choices=CellSampleType.choices(),
default="BLD",
render_kw={"size": "1", "class": "form-control bd-light"},
)

sample_mol_type_default = SelectField(
"Default molecular sample type",
choices=MolecularSampleType.choices(),
default=None,
render_kw={"size": "1", "class": "form-control bd-light"},
)

container_basetype_default = SelectField(
"Default Container Base Type",
choices=ContainerBaseType.choices(),
default="LTS",
render_kw={"size": "1", "class": "form-control bd-light"},
)

# container_basetype_choices = SelectMultipleField(
# "Container Base Type choices",
# choices=ContainerBaseType.choices(),
# default=[])
#
# prm_container_default = SelectField(
# "Default primary container type",
# choices=FluidContainer.choices(),
# default = "CAT")
# prm_containerprm_choices = SelectMultipleField(
prm_container_default = SelectField(
"Default primary container type",
choices=FluidContainer.choices(),
default="CAT",
render_kw={"size": "1", "class": "form-control bd-light"},
)

# prm_container_choices = SelectMultipleField(
# "Primary container type choices",
# choices=FluidContainer.choices(),
# default = [])
#
# lts_container_default = SelectField(
# "Default Long-term Preservation container",
# choices=CellContainer.choices(),
# default="D")
#

lts_container_default = SelectField(
"Default Long-term Preservation container",
choices=CellContainer.choices(),
default="D",
render_kw={"size": "1", "class": "form-control bd-light"},
)

# lts_containerprm_choices = SelectMultipleField(
# "Long-term Preservation container choices",
# choices=CellContainer.choices(),
# default=[])

saveto_template_name = StringField(
"To save setting as template, provide a nick name here",
default=None,
validators=[Length(min=4, max=36)],
render_kw={"size": "1", "class": "form-control bd-light alert-info"},
)

# data_entry = {
# "site": {"default":1, "choices":[1,2]},
#
Expand Down
1 change: 0 additions & 1 deletion services/web/app/admin/routes/audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
@admin.route("/audit/index", methods=["GET", "POST"])
@login_required
def audit_index():

sites_response = requests.get(
url_for("api.site_home_tokenuser", _external=True),
headers=get_internal_api_header(),
Expand Down
Loading

0 comments on commit 4872b72

Please sign in to comment.