liquid_feedback_frontend
diff env/ldap/update_member_privileges.lua @ 1071:58f48a8a202a
Imported and merged LDAP patch
author | bsw |
---|---|
date | Fri Jul 18 21:42:59 2014 +0200 (2014-07-18) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/env/ldap/update_member_privileges.lua Fri Jul 18 21:42:59 2014 +0200 1.3 @@ -0,0 +1,56 @@ 1.4 +-- Update member privileges from LDAP 1.5 +-- -------------------------------------------------------------------------- 1.6 +-- 1.7 +-- arguments: 1.8 +-- member: the member for which the privileges should be updated 1.9 +-- ldap_entry: the ldap entry to be used for updating the privileges 1.10 +-- 1.11 +-- returns: 1.12 +-- err: an error code, if an error occured (string) 1.13 +-- err2: Error dependent extra error information 1.14 + 1.15 +function ldap.update_member_privileges(member, ldap_entry) 1.16 + 1.17 + local privileges, err = config.ldap.member.privilege_map(ldap_entry, member) 1.18 + 1.19 + if err then 1.20 + return false, "privilege_map_error", err 1.21 + end 1.22 + 1.23 + local privileges_by_unit_id = {} 1.24 + for i, privilege in ipairs(privileges) do 1.25 + privileges_by_unit_id[privilege.unit_id] = privilege 1.26 + end 1.27 + 1.28 + local current_privileges = Privilege:by_member_id(member.id) 1.29 + local current_privilege_ids = {} 1.30 + 1.31 + for i, privilege in ipairs(current_privileges) do 1.32 + if privileges_by_unit_id[privilege.unit_id] then 1.33 + current_privilege_ids[privilege.unit_id] = privilege 1.34 + else 1.35 + privilege:destroy() 1.36 + end 1.37 + end 1.38 + 1.39 + for i, privilege in ipairs(privileges) do 1.40 + local current_privilege = current_privilege_ids[privilege.unit_id] 1.41 + if not current_privilege then 1.42 + current_privilege = Privilege:new() 1.43 + current_privilege.member_id = member.id 1.44 + current_privileges[#current_privileges+1] = current_privilege 1.45 + end 1.46 + for key, val in pairs(privilege) do 1.47 + current_privilege[key] = val 1.48 + end 1.49 + end 1.50 + 1.51 + for i, privilege in ipairs(current_privileges) do 1.52 + local err = privilege:try_save() 1.53 + if err then 1.54 + return false, "privilege_save_error", err 1.55 + end 1.56 + end 1.57 + 1.58 + return true 1.59 +end