hackforla / hackforla/peopledepot

Done? Implement field level privileges for practice lead requester with user endpoint

Open
#399 0 comments 0 reactions 0 assignees View on GitHub
complexity: medium dependency ethan feature: security milestone: missing PII: FALSE role: dev s: PD team size: 3pt
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.