fix: deduplicate role profiles
This commit is contained in:
parent
f609025472
commit
bfa1aebcc6
2 changed files with 13 additions and 6 deletions
|
|
@ -163,6 +163,7 @@ class User(Document):
|
|||
self.set_full_name()
|
||||
self.check_enable_disable()
|
||||
self.ensure_unique_roles()
|
||||
self.ensure_unique_role_profiles()
|
||||
self.remove_all_roles_for_guest()
|
||||
self.validate_username()
|
||||
self.remove_disabled_roles()
|
||||
|
|
@ -646,12 +647,18 @@ class User(Document):
|
|||
self.get("roles").remove(role)
|
||||
|
||||
def ensure_unique_roles(self):
|
||||
exists = []
|
||||
for d in self.get("roles"):
|
||||
exists = set()
|
||||
for d in list(self.roles):
|
||||
if (not d.role) or (d.role in exists):
|
||||
self.get("roles").remove(d)
|
||||
else:
|
||||
exists.append(d.role)
|
||||
self.roles.remove(d)
|
||||
exists.add(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):
|
||||
if not self.username and self.is_new() and self.first_name:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ def execute():
|
|||
)
|
||||
user_profiles = get_records_to_insert(users)
|
||||
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):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue