hackforla / hackforla/peopledepot
Done? Implement field level privileges for practice lead requester with user endpoint
- Dominant language
- Python
- Stars
- 14
- Forks
- 37
- Avg merge
- 9d 15h
- Merged PRs (30d)
- 5
Description
### Dependencies
- [ ] #346
### Overview
For the /user endpoint, ensure correct field level permissions enforced when requester is a practice lead and target user team mate is either assigned or not assigned to the the same practice area.
### Detail
1. When the practice areas match
- 1A: response fields determined by read field permissions configured for practiceLeadProject.
- 1B: fields allowed in patch are determined by batch field permissions configured for practiceLeadProject
2. When practice areas do not match
- 2A: response fields determined by read field permissions configured for memberProject
- 2B: patching not allowed
### Action Items
- [ ] modify load_data.py to include a practice area lead named wendy_practicelead assigned to project Website, practice area development.
- [ ] modify load_data.py to modify existing website project members to be assigned to development practice area and product management practice area
- [ ] implement test for get_most_privileged_perm_type to get most privileged perm type for requester practice lead and target user in same practice area returns practiceLeadProject
- [ ] implement test for get_most_privileged_perm_type to get most privileged perm type for requester practice lead and target user in different practice area returns memberProject
- [ ] modify get_most_privileged_perm_type to change the following code to a loop that handles case where target user is in a different practice area:
```
min_permission = min(permissions, key=lambda p: p["permission_type__rank"])
return min_permission["permission_type__name"]
```
to:
```
min_permission = min(permissions, key=lambda p: calculate_rank(p, requesting_user, target_user)
return min_permission["permission_type__name"]
```
Code for calculate_rank:
```
def calculate_rank (p, requesting_user,target_user)
if p.permission_type__name == practiceLeadProject and requesting_user.practice_area != target_user.practice_area
return permissionType.object.filter(permissionType==memberProject).first()["rank"]
else
return p.permission_type_rank
```
Contributor guide
Assessment
This issue has not been assessed yet.