Skip to content

Commit 76be0bd

Browse files
Updated Docs
1 parent 759e003 commit 76be0bd

File tree

4 files changed

+116
-17
lines changed

4 files changed

+116
-17
lines changed

README.md

Lines changed: 93 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,28 +54,109 @@ Then you can publish the package resources (if needed) by doing:
5454
python craft package:publish masonite-permission
5555
```
5656

57+
Finally, extend `User` model class with `HasRoles`.
58+
59+
```python
60+
from masoniteorm.models import Model
61+
from masoniteorm.scopes import SoftDeletesMixin
62+
from masonite.authentication import Authenticates
63+
from masonite_permission.models.has_roles import HasRoles
64+
65+
class User(Model, SoftDeletesMixin, Authenticates, HasRoles):
66+
"""User Model."""
67+
68+
__fillable__ = ["name", "email", "password"]
69+
__hidden__ = ["password"]
70+
__auth__ = "email"
71+
```
72+
5773
## Usage
5874

75+
**Role**
76+
Methods that can be used in role model object:
77+
5978
```python
60-
""" Permission Syncing """
61-
permissions = Permission.all()
62-
role.sync_permissions(permissions) # sync permissions to role
63-
role.sync_permissions([]) # remove all permissions from role
79+
""" collection can be synced """
80+
permission_collection = Permission.all()
81+
role = Role.find(1)
82+
83+
role.sync_permissions(permission_collection)
84+
85+
""" id will also work """
86+
permission_ids = [1,2,3,4,5]
87+
role.sync_permissions(permission_ids)
88+
89+
""" clear related data """
90+
role.sync_permissions([])
91+
6492

6593
""" Attach/Detatch Permission """
6694
permission = Permission.first()
6795
role.attach_permission(permission) # add permission to role, ignores if permission already exists
6896
role.detach_permission(permission) # remove permission from role, ignores if permission doesn't exist
6997

70-
""" Role Syncing """
71-
roles = Role.all()
72-
permission.sync_roles(roles) # sync roles to role
73-
permissioin.sync_roles([]) # remove all roles from role
98+
""" this can also be done """
99+
role.attach_permission(1) # passing permission id instead of object, ignores if permission already exists
100+
role.detatch_permission(1) # passing permission id instead of object, ignores if permission doesn't exist
101+
```
102+
103+
**Permission**
104+
Methods that can be used in permission model object:
105+
106+
```python
107+
""" collection can be synced """
108+
roles_collection = Role.all()
109+
permission = Permission.find(1)
110+
111+
permission.sync_roles(role_collection)
112+
113+
""" id will also work """
114+
role_ids = [1,2,3,4,5]
115+
permission.sync_roles(role_ids)
116+
117+
""" clear related data """
118+
permissioin.sync_roles([])
119+
74120

75121
""" Attach/Detatch Role """
76122
role = Role.first()
77123
permission.attach_role(role) # add role to permission, ignores if role already exists
78124
permission.detach_role(role) # remove role from permission, ignores if role doesn't exist
125+
126+
""" this can also be done """
127+
permission.attach_role(1) # passing role id instead of object, ignores if role already exists
128+
permission.detatch_role(1) # passing role id instead of object, ignores if role doesn't exist
129+
```
130+
131+
**User**
132+
Methods that can be used in user model object:
133+
134+
```python
135+
user = User.first()
136+
137+
# Add/Remove single role
138+
role = Role.first()
139+
140+
user.attach_role(role) # or you can pass role id
141+
user.detatch_role(role) # or you can pass role id
142+
143+
# if you want to add multiple roles
144+
roles = Role.all()
145+
146+
user.sync_roles(roles) # or you can also pass list of ids...
147+
148+
# remove all roles from user at once
149+
user.sync_roles([])
150+
151+
# check if user has role
152+
user.has_role("role-slug") # returns boolean
153+
154+
# check if user has any of the roles
155+
user.has_any_role(["role-1", "role-2"]) # returns boolean
156+
157+
# check if user has all of the roles
158+
user.has_all_roles(["role-1", "role-2"]) # returns boolean
159+
79160
```
80161

81162
## Contributing
@@ -89,3 +170,7 @@ Please read the [Contributing Documentation](CONTRIBUTING.md) here.
89170
## License
90171

91172
Masonite Permission is open-sourced software licensed under the [MIT license](LICENSE).
173+
174+
```
175+
176+
```

masonite.sqlite3

0 Bytes
Binary file not shown.

src/masonite_permission/models/has_roles.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,19 @@ class HasRoles:
1010
def roles(self):
1111
"""User can have multiple roles"""
1212
from ..models.role import Role
13-
1413
return Role
14+
15+
def permissions(self):
16+
"""User can have multiple permissions"""
17+
from ..models.permission import Permission
18+
19+
roles = self.roles.pluck('id')
20+
return (
21+
Permission.join("permission_role as pr", "pr.permission_id", "=", "id")
22+
.where_in("pr.role_id", roles)
23+
.select_raw("permissions.*")
24+
.get()
25+
)
1526

1627
def has_role(self, role):
1728
"""Check if user has a role"""
@@ -102,4 +113,4 @@ def detatch_role(self, role):
102113
)
103114

104115
if exists:
105-
self.detach("roles", role)
116+
self.detach("roles", role)

tests/integrations/app/controllers/WelcomeController.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
from masonite.views import View
33
from masonite.controllers import Controller
44

5-
# from masoniteorm.query import QueryBuilder
6-
# from src.masonite_permission.models.permission import Permission
7-
# from src.masonite_permission.models.role import Role
8-
# from tests.integrations.app.models.User import User
5+
from masoniteorm.query import QueryBuilder
6+
from src.masonite_permission.models.permission import Permission
7+
from src.masonite_permission.models.role import Role
8+
from tests.integrations.app.models.User import User
99

1010

1111
class WelcomeController(Controller):
@@ -59,10 +59,11 @@ def test(self):
5959
QueryBuilder().table("users").bulk_create(users)
6060
QueryBuilder().table("roles").bulk_create(roles)
6161
QueryBuilder().table("permissions").bulk_create(permissions)
62+
"""
6263

6364
user = User.first()
6465
role = Role.where("slug", "admin").first()
65-
permission = Permission.where("slug", "create-user").first()"""
66+
permission = Permission.where("slug", "create-user").first()
6667

6768
"""Role related methods
6869
Methods:
@@ -89,5 +90,7 @@ def test(self):
8990
user.has_any_role(roles)
9091
user.has_all_roles(roles)
9192
"""
92-
93-
return "OK"
93+
# role.sync_permissions(Permission.all())
94+
# return role.permissions
95+
# user.attach_role(role)
96+
return user.permissions().pluck('name')

0 commit comments

Comments
 (0)