Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: don't automatically add system manager #26540

Merged
merged 6 commits into from
May 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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