Skip to content

Commit 803ba92

Browse files
committed
use Polar shorthand rules
1 parent 825aade commit 803ba92

File tree

5 files changed

+20
-20
lines changed

5 files changed

+20
-20
lines changed

server/src/auth/policies/core/members.polar

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
has_permission(user: User, "read", member: Member) if
2-
user.memberInfo.department.id = member.department.id or
3-
user.memberInfo.department.name = "hr";
4-
5-
has_permission(user: User, "update", member: Member) if
6-
user.memberInfo.id = member.id or
7-
user.memberInfo.department.name = "hr";
1+
has_role(user: User, "hr_member", _member: Member) if user.memberInfo.department.name = "hr";
2+
has_role(user: User, "self", member: Member) if user.memberInfo.id = member.id;
3+
has_role(user: User, "same_department", member: Member) if user.memberInfo.department.id = member.department.id;
84

95
allow_field(user: User, "read", member: Member, field) if
106
# anyone can read public fields

server/src/auth/policies/members.polar

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@ has_permission(_: User, "read", _department: Department);
66

77
resource Member {
88
permissions = ["read", "update"];
9+
roles = ["self", "same_department", "hr_member"];
910
relations = {department: Department};
11+
12+
"read" if "same_department";
13+
"read" if "hr_member";
14+
15+
"update" if "self";
16+
"update" if "hr_member";
1017
}
1118

1219
has_relation(department: Department, "department", member: Member) if
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
has_permission(user: User, "read", member: Member) if
2-
user.member.department.id = member.departmentId or
3-
user.member.department.name = "hr";
4-
5-
has_permission(user: User, "update", member: Member) if
6-
user.member.id = member.id or
7-
user.member.department.name = "hr";
1+
has_role(user: User, "hr_member", _member: Member) if user.member.department.name = "hr";
2+
has_role(user: User, "self", member: Member) if user.member.id = member.id;
3+
has_role(user: User, "same_department", member: Member) if user.member.department.id = member.department.id;

server/src/database/seeds/create-users-members.seed.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export default class CreateUsersAndMembers implements Seeder {
3636
memberId: engineeringMember.id,
3737
});
3838

39-
const members = await factory(MemberOrm)().createMany(10);
39+
const members = await factory(MemberOrm)().createMany(20);
4040
for (const member of members) {
4141
await factory(UserOrm)().create({ memberId: member.id });
4242
}

server/tests/integration/members/listAllMembers.test.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ describe('ListAllMembers', () => {
5656
loggedInUser = USERS.nonAdminAndEngineer;
5757
res = await authorizeRequest(
5858
request(app).get('/members'),
59-
USERS.nonAdminAndEngineer.userId
59+
loggedInUser.userId
6060
).expect(200);
6161
expect(res.body.members).toBeInstanceOf(Array);
62+
expect(res.body.members.length).toBeGreaterThan(1);
6263
});
6364

6465
it('should return only members of the users department', async () => {
@@ -68,9 +69,9 @@ describe('ListAllMembers', () => {
6869
}
6970
});
7071

71-
it("should omit member's private fields such as salaries except for the logged in user and should not be editable", async () => {
72+
it("should omit member's private fields such as salaries except for the logged in user and should not be editable", () => {
7273
const { members } = res.body;
73-
const membersLoggedInUserExcluded = members.find(
74+
const membersLoggedInUserExcluded = members.filter(
7475
(m: any) => m.id !== loggedInUser.memberId
7576
);
7677
for (const member of membersLoggedInUserExcluded) {
@@ -97,12 +98,12 @@ describe('ListAllMembers', () => {
9798
loggedInUser = USERS.nonAdminAndHr;
9899
res = await authorizeRequest(
99100
request(app).get('/members'),
100-
USERS.nonAdminAndHr.userId
101+
loggedInUser.userId
101102
).expect(200);
102103
expect(res.body.members).toBeInstanceOf(Array);
103104
});
104105

105-
it('should return all members with all fields present', async () => {
106+
it('should return all members with all fields present', () => {
106107
const { members } = res.body;
107108
for (const member of members) {
108109
expect(member.salary).toBeDefined();

0 commit comments

Comments
 (0)