fix: deduplicate role profiles

This commit is contained in:
Ankush Menat 2024-02-10 11:44:19 +05:30
parent f609025472
commit bfa1aebcc6
2 changed files with 13 additions and 6 deletions

View file

@ -163,6 +163,7 @@ class User(Document):
self.set_full_name() self.set_full_name()
self.check_enable_disable() self.check_enable_disable()
self.ensure_unique_roles() self.ensure_unique_roles()
self.ensure_unique_role_profiles()
self.remove_all_roles_for_guest() self.remove_all_roles_for_guest()
self.validate_username() self.validate_username()
self.remove_disabled_roles() self.remove_disabled_roles()
@ -646,12 +647,18 @@ class User(Document):
self.get("roles").remove(role) self.get("roles").remove(role)
def ensure_unique_roles(self): def ensure_unique_roles(self):
exists = [] exists = set()
for d in self.get("roles"): for d in list(self.roles):
if (not d.role) or (d.role in exists): if (not d.role) or (d.role in exists):
self.get("roles").remove(d) self.roles.remove(d)
else: exists.add(d.role)
exists.append(d.role)
def ensure_unique_role_profiles(self):
seen = set()
for rp in list(self.role_profiles):
if rp.role_profile in seen:
self.role_profiles.remove(rp)
seen.add(rp.role_profile)
def validate_username(self): def validate_username(self):
if not self.username and self.is_new() and self.first_name: if not self.username and self.is_new() and self.first_name:

View file

@ -8,7 +8,7 @@ def execute():
) )
user_profiles = get_records_to_insert(users) user_profiles = get_records_to_insert(users)
bulk_insert("User Role Profile", user_profiles, ignore_duplicates=True) bulk_insert("User Role Profile", user_profiles, ignore_duplicates=True)
frappe.db.set_value("User", {}, "role_profile_name", None) frappe.db.set_value("User", {}, "role_profile_name", None, update_modified=None)
def get_records_to_insert(users): def get_records_to_insert(users):