1
1
from django .db import models
2
2
from django .conf import settings
3
+ from django .contrib .auth .models import Group
3
4
4
5
from crontab import CronTab
5
6
@@ -13,14 +14,45 @@ class JobError(BareModel):
13
14
logfile = models .FilePathField ()
14
15
15
16
17
+ class JobPermission (BareModel ):
18
+ field_list = ['name' , 'permission' , 'users' , 'groups' ]
19
+
20
+ name = models .CharField (max_length = 100 )
21
+ permission = models .CharField (
22
+ max_length = 50 ,
23
+ choices = [('all' , 'Full' ), ('read' , 'Read' ), ('write' , 'Write' ), ('execute' , 'Execute' )],
24
+ )
25
+ users = models .ManyToManyField (
26
+ settings .AUTH_USER_MODEL ,
27
+ through = 'JobPermissionMemberUser' ,
28
+ through_fields = ('permission' , 'user' ),
29
+ )
30
+ groups = models .ManyToManyField (
31
+ Group ,
32
+ through = 'JobPermissionMemberGroup' ,
33
+ through_fields = ('permission' , 'group' ),
34
+ )
35
+
36
+
37
+ class JobPermissionMemberUser (BareModel ):
38
+ user = models .ForeignKey (settings .AUTH_USER_MODEL , on_delete = models .CASCADE )
39
+ permission = models .ForeignKey (JobPermission , on_delete = models .CASCADE )
40
+
41
+
42
+ class JobPermissionMemberGroup (BareModel ):
43
+ group = models .ForeignKey (Group , on_delete = models .CASCADE )
44
+ permission = models .ForeignKey (JobPermission , on_delete = models .CASCADE )
45
+
46
+
16
47
class Job (BareModel ):
17
- field_list = ['inventory' , 'playbook' , 'schedule' , 'name' , 'job_id ' ]
48
+ field_list = ['job_id' , ' inventory' , 'playbook' , 'schedule' , 'name' , 'permission ' ]
18
49
50
+ job_id = models .PositiveIntegerField (primary_key = True )
19
51
inventory = models .CharField (max_length = 150 )
20
52
playbook = models .CharField (max_length = 150 )
21
53
schedule = models .CharField (max_length = 50 , validators = [CronTab ])
22
54
name = models .CharField (max_length = 100 )
23
- job_id = models .PositiveIntegerField ( max_length = 50 )
55
+ permission = models .ForeignKey ( JobPermission , on_delete = models . SET_NULL , null = True )
24
56
25
57
26
58
class JobExecution (BareModel ):
@@ -31,7 +63,7 @@ class JobExecution(BareModel):
31
63
]
32
64
33
65
user = models .ForeignKey (
34
- settings .AUTH_USER_MODEL , on_delete = models .DO_NOTHING , blank = True , null = True ,
66
+ settings .AUTH_USER_MODEL , on_delete = models .PROTECT , blank = True , null = True ,
35
67
related_name = f"jobexec_fk_user"
36
68
)
37
69
job = models .ForeignKey (Job , on_delete = models .CASCADE , related_name = f"jobexec_fk_job" )
0 commit comments