Skip to content

Commit

Permalink
fix: don't automatically add system manager (#26540)
Browse files Browse the repository at this point in the history
* fix: don't automatically add system manager

* feat: remove User.a_system_manager_should_exist

* feat: remove User.add_system_manager_role

* feat: remove User.is_system_manager_disabled

* feat: remove User.get_other_system_managers

* feat: add "System Manager" role to User created by setup wizard
  • Loading branch information
barredterra committed May 24, 2024
1 parent 7e18910 commit 4a7de16
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 59 deletions.
60 changes: 1 addition & 59 deletions frappe/core/doctype/user/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ def validate(self):
if self.name not in STANDARD_USERS:
self.email = self.name
self.validate_email_type(self.name)
self.add_system_manager_role()

self.move_role_profile_name_to_role_profiles()
self.populate_role_profile_roles()
self.check_roles_added()
Expand Down Expand Up @@ -279,48 +279,13 @@ def check_enable_disable(self):
if not cint(self.enabled) and self.name in STANDARD_USERS:
frappe.throw(_("User {0} cannot be disabled").format(self.name))

if not cint(self.enabled):
self.a_system_manager_should_exist()

# clear sessions if disabled
if not cint(self.enabled) and getattr(frappe.local, "login_manager", None):
frappe.local.login_manager.logout(user=self.name)

# toggle notifications based on the user's status
toggle_notifications(self.name, enable=cint(self.enabled), ignore_permissions=True)

def add_system_manager_role(self):
if self.is_system_manager_disabled():
return

# if adding system manager, do nothing
if not cint(self.enabled) or (
"System Manager" in [user_role.role for user_role in self.get("roles")]
):
return

if (
self.name not in STANDARD_USERS
and self.user_type == "System User"
and not self.get_other_system_managers()
and cint(frappe.db.get_single_value("System Settings", "setup_complete"))
):
msgprint(_("Adding System Manager to this User as there must be atleast one System Manager"))
self.append("roles", {"doctype": "Has Role", "role": "System Manager"})

if self.name == "Administrator":
# Administrator should always have System Manager Role
self.extend(
"roles",
[
{"doctype": "Has Role", "role": "System Manager"},
{"doctype": "Has Role", "role": "Administrator"},
],
)

def is_system_manager_disabled(self):
return frappe.db.get_value("Role", {"name": "System Manager"}, ["disabled"])

def email_new_password(self, new_password=None):
if new_password and not self.flags.in_insert:
_update_password(user=self.name, pwd=new_password, logout_all_sessions=self.logout_all_sessions)
Expand Down Expand Up @@ -430,20 +395,6 @@ def reset_password(self, send_email=False, password_expired=False):

return link

def get_other_system_managers(self):
user_doctype = DocType("User").as_("user")
user_role_doctype = DocType("Has Role").as_("user_role")
return (
frappe.qb.from_(user_doctype)
.from_(user_role_doctype)
.select(user_doctype.name)
.where(user_role_doctype.role == "System Manager")
.where(user_doctype.enabled == 1)
.where(user_role_doctype.parent == user_doctype.name)
.where(user_role_doctype.parent.notin(["Administrator", self.name]))
.limit(1)
).run()

def get_fullname(self):
"""get first_name space last_name"""
return (self.first_name or "") + (self.first_name and " " or "") + (self.last_name or "")
Expand Down Expand Up @@ -528,20 +479,11 @@ def send_login_mail(self, subject, template, add_args, now=None, custom_template
retry=3,
)

def a_system_manager_should_exist(self):
if self.is_system_manager_disabled():
return

if not self.get_other_system_managers():
throw(_("There should remain at least one System Manager"))

def on_trash(self):
frappe.clear_cache(user=self.name)
if self.name in STANDARD_USERS:
throw(_("User {0} cannot be deleted").format(self.name))

self.a_system_manager_should_exist()

# disable the user and log him/her out
self.enabled = 0
if getattr(frappe.local, "login_manager", None):
Expand Down
1 change: 1 addition & 0 deletions frappe/desk/page/setup_wizard/setup_wizard.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ def create_or_update_user(args): # nosemgrep
}
)
user.append_roles(*_get_default_roles())
user.append_roles("System Manager")
user.flags.no_welcome_mail = True
user.insert()

Expand Down

0 comments on commit 4a7de16

Please sign in to comment.