From: Tom Clegg Date: Mon, 21 Mar 2022 14:17:29 +0000 (-0400) Subject: Merge branch '18691-freeze-project' X-Git-Tag: 2.4.0~36 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/44c93373e97da98645d41ae8f09c6eef6788bb26?hp=-c Merge branch '18691-freeze-project' refs #18691 Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- 44c93373e97da98645d41ae8f09c6eef6788bb26 diff --combined lib/config/config.default.yml index 0a8f55244b,656385cc1c..8bbc33ba08 --- a/lib/config/config.default.yml +++ b/lib/config/config.default.yml @@@ -240,6 -240,18 +240,18 @@@ Clusters # https://doc.arvados.org/admin/metadata-vocabulary.html VocabularyPath: "" + # If true, a project must have a non-empty description field in + # order to be frozen. + FreezeProjectRequiresDescription: false + + # Project properties that must have non-empty values in order to + # freeze a project. Example: {"property_name": true} + FreezeProjectRequiresProperties: {} + + # If true, only an admin user can un-freeze a project. If false, + # any user with "manage" permission can un-freeze. + UnfreezeProjectRequiresAdmin: false + Users: # Config parameters to automatically setup new users. If enabled, # this users will be able to self-activate. Enable this if you want @@@ -903,6 -915,11 +915,6 @@@ # If false, containers are scheduled on preemptible instances # only when requested by the submitter. # - # Note that arvados-cwl-runner does not currently offer a - # feature to request preemptible instances, so this value - # effectively acts as a cluster-wide decision about whether to - # use preemptible instances. - # # This flag is ignored if no preemptible instance types are # configured, and has no effect on top-level containers. AlwaysUsePreemptibleInstances: true diff --combined services/api/app/models/user.rb index 811cd89758,44e6ca7578..bbb2378f5c --- a/services/api/app/models/user.rb +++ b/services/api/app/models/user.rb @@@ -21,7 -21,6 +21,7 @@@ class User < ArvadosMode uniqueness: true, allow_nil: true) validate :must_unsetup_to_deactivate + validate :identity_url_nil_if_empty before_update :prevent_privilege_escalation before_update :prevent_inactive_admin before_update :verify_repositories_empty, :if => Proc.new { @@@ -87,6 -86,7 +87,7 @@@ VAL_FOR_PERM = {:read => 1, :write => 2, + :unfreeze => 3, :manage => 3} @@@ -141,6 -141,23 +142,23 @@@ SELECT 1 FROM #{PERMISSION_VIEW ).any? return false end + + if action == :write + if FrozenGroup.where(uuid: [target_uuid, target_owner_uuid]).any? + # self or parent is frozen + return false + end + elsif action == :unfreeze + # "unfreeze" permission means "can write, but only if + # explicitly un-freezing at the same time" (see + # ArvadosModel#ensure_owner_uuid_is_permitted). If the + # permission query above passed the permission level of + # :unfreeze (which is the same as :manage), and the parent + # isn't also frozen, then un-freeze is allowed. + if FrozenGroup.where(uuid: target_owner_uuid).any? + return false + end + end end true end @@@ -811,10 -828,4 +829,10 @@@ SELECT target_uuid, perm_leve repo.save! end end + + def identity_url_nil_if_empty + if identity_url == "" + self.identity_url = nil + end + end end