Passed
Pull Request — master (#45)
by Andrii
12:57
created

CheckAccessTrait::testAlmighty()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 51
Code Lines 46

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 46
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 51
rs 9.1781

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * RBAC implementation for HiPanel
4
 *
5
 * @link      https://github.com/hiqdev/hipanel-rbac
6
 * @package   hipanel-rbac
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2016-2020, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hipanel\rbac\tests\unit;
12
13
trait CheckAccessTrait
14
{
15
    public function setAssignments()
16
    {
17
        foreach ($this->auth->getAllItems() as $item) {
18
            $this->auth->setAssignment($item->name, $item->name);
19
        }
20
    }
21
22
    public function assertAccesses($userId, array $allowedPermissions)
23
    {
24
        $deniedPermissions = array_diff($this->getAllPermissions(), $allowedPermissions);
25
26
        $this->assertAccess($userId, true, $allowedPermissions);
27
        $this->assertAccess($userId, false, $deniedPermissions);
28
    }
29
30
    public function assertAccess($userId, $isAllowed, array $permissions)
31
    {
32
        foreach ($permissions as $permission) {
33
            $checked = $this->auth->checkAccess($userId, $permission);
34
            if ($checked !== $isAllowed) {
35
                var_dump(compact('userId', 'isAllowed', 'permission'));
0 ignored issues
show
Security Debugging Code introduced by
var_dump(compact('userId...llowed', 'permission')) looks like debug code. Are you sure you do not want to remove it?
Loading history...
36
            }
37
            $this->assertSame($isAllowed, $checked);
0 ignored issues
show
Bug introduced by
It seems like assertSame() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

37
            $this->/** @scrutinizer ignore-call */ 
38
                   assertSame($isAllowed, $checked);
Loading history...
38
        }
39
    }
40
41
    protected $allPermissions;
42
43
    protected function getAllPermissions()
44
    {
45
        if (empty($this->allPermissions)) {
46
            $this->allPermissions = array_keys($this->auth->getPermissions());
47
            foreach ($this->allPermissions as $key => $permission) {
48
                if (strncmp('deny:', $permission, 5) === 0) {
49
                    unset($this->allPermissions[$key]);
50
                }
51
            }
52
        }
53
54
        return $this->allPermissions;
55
    }
56
57
    public function testNobody()
58
    {
59
        $this->assertAccesses('role:nobody', [
60
            'nothing',
61
        ]);
62
    }
63
64
    public function testUnauthorized()
65
    {
66
        $this->assertAccesses('', [
67
            'restore-password', 'deposit', 'server.pay', 'plan.read',
68
        ]);
69
    }
70
71
    public function testClient()
72
    {
73
        $this->assertAccesses('role:client', [
74
            'restore-password', 'deposit', 'have-goods',
75
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close',
76
            'domain.read', 'domain.update', 'domain.pay', 'domain.push', 'domain.delete-agp', 'domain.set-nss',
77
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
78
            'certificate.read', 'certificate.create', 'certificate.update', 'certificate.pay', 'certificate.push',
79
            'document.read', 'document.create', 'document.invoice',
80
            'contact.read', 'contact.create', 'contact.update', 'contact.delete',
81
            'server.read', 'server.pay', 'server.control-power', 'server.control-system', 'server.set-note',
82
            'account.read', 'account.create', 'account.update', 'account.delete',
83
            'bill.read', 'plan.read', 'finance.read', 'price.read', 'sale.read',
84
            'backup.read', 'backup.delete',
85
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
86
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
87
            'db.read', 'db.create', 'db.update', 'db.delete',
88
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
89
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
90
            'request.read', 'request.create', 'request.update', 'request.delete',
91
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
92
            'ip.read', 'service.read', 'client.notify',
93
        ]);
94
    }
95
96
    public function testSupport()
97
    {
98
        $this->assertAccesses('role:support', [
99
            'access-subclients', 'support',
100
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close', 'ticket.update', 'ticket.delete',
101
            'client.read', 'client.list',
102
            'domain.read', 'domain.update', 'domain.delete-agp', 'domain.set-nss',
103
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
104
            'certificate.read', 'certificate.create', 'certificate.update',
105
            'contact.read', 'contact.create', 'contact.update', 'contact.delete',
106
            'server.read', 'server.control-power', 'server.control-system', 'server.set-note',
107
            'account.read', 'account.create', 'account.update', 'account.delete',
108
            'backup.read', 'backup.delete',
109
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
110
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
111
            'db.read', 'db.create', 'db.update', 'db.delete',
112
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
113
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
114
            'request.read', 'request.create', 'request.update', 'request.delete',
115
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
116
            'ip.read', 'service.read',
117
        ]);
118
    }
119
120
    public function testAdmin()
121
    {
122
        $this->assertAccesses('role:admin', [
123
            'access-subclients', 'support', 'admin',
124
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close', 'ticket.update', 'ticket.delete',
125
            'client.read', 'client.list',
126
            'domain.read', 'domain.update', 'domain.delete-agp', 'domain.set-nss',
127
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
128
            'certificate.read', 'certificate.create', 'certificate.update',
129
            'contact.read', 'contact.create', 'contact.update', 'contact.delete',
130
131
            'server.read', 'server.create', 'server.update', 'server.delete', 'server.control-power',
132
            'server.control-system', 'server.wizzard', 'server.set-label', 'server.set-note', 'server.manage-settings',
133
            'server.see-label',
134
135
            'hub.read', 'hub.create', 'hub.update', 'hub.delete',
136
            'consumption.read',
137
            'stock.read',
138
            'part.read', 'part.create', 'part.update', 'part.delete',
139
            'move.read', 'move.create', 'move.update', 'move.delete', 'move.get-directions',
140
            'order.read',
141
            'model.read', 'model.create', 'model.update', 'model.delete',
142
            'account.read', 'account.create', 'account.update', 'account.delete',
143
            'backup.read', 'backup.delete',
144
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
145
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
146
            'db.read', 'db.create', 'db.update', 'db.delete',
147
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
148
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
149
            'request.read', 'request.create', 'request.update', 'request.delete',
150
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
151
            'ip.read', 'ip.create', 'ip.update', 'ip.delete',
152
            'service.read', 'service.create', 'service.update', 'service.delete',
153
        ]);
154
    }
155
156
    public function testAccounter()
157
    {
158
        $this->assertAccesses('role:accounter', [
159
            'access-subclients', 'support', 'manage', 'access-reseller',
160
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close', 'ticket.update', 'ticket.delete',
161
            'client.read', 'client.create', 'client.update', 'client.delete', 'client.list',
162
            'client.set-tmp-pwd', 'contact.set-verified', 'client.block', 'client.unblock',
163
            'client.get-note', 'client.set-note', 'client.set-description',
164
            'bill.read',
165
            'purse.update', 'purse.read',
166
            'sale.read', 'sale.delete', 'sale.create', 'sale.update',
167
            'plan.read', 'plan.create', 'plan.update', 'plan.delete', 'plan.force-read',
168
            'price.read', 'price.create', 'price.update', 'price.delete',
169
            'domain.read', 'domain.update', 'domain.delete',
170
            'domain.pay', 'domain.push', 'domain.delete-agp', 'domain.set-nss',
171
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
172
            'certificate.read', 'certificate.create', 'certificate.update', 'certificate.delete', 'certificate.pay', 'certificate.push',
173
            'contact.read', 'contact.create', 'contact.update', 'contact.delete', 'contact.force-verify',
174
            'server.read', 'server.pay', 'server.sell', 'server.control-power', 'server.control-system', 'server.enable-block', 'server.disable-block', 'server.set-label', 'server.set-note', 'server.see-label',
175
            'consumption.read', 'consumption.update', 'consumption.delete',
176
            'document.read', 'document.create', 'document.update', 'document.delete',
177
            'document.generate', 'document.acceptance', 'document.invoice',
178
            'mailing.prepare', 'mailing.send',
179
            'stock.read',
180
            'hub.read', 'hub.sell',
181
            'part.read', 'part.create', 'part.update', 'part.delete',
182
            'move.read', 'move.create', 'move.update', 'move.delete', 'move.get-directions',
183
            'model.read', 'model.create', 'model.update', 'model.delete',
184
            'order.read',
185
            'account.read', 'account.create', 'account.update', 'account.delete',
186
            'bill.read', 'plan.read', 'finance.read',
187
            'backup.read', 'backup.delete',
188
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
189
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
190
            'db.read', 'db.create', 'db.update', 'db.delete',
191
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
192
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
193
            'request.read', 'request.create', 'request.update', 'request.delete',
194
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
195
            'ip.read', 'service.read', 'client.notify',
196
        ]);
197
    }
198
199
    public function testManager()
200
    {
201
        $this->assertAccesses('role:manager', [
202
            'access-subclients', 'support', 'manage', 'access-reseller',
203
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close', 'ticket.update', 'ticket.delete',
204
            'client.read', 'client.create', 'client.update', 'client.delete', 'client.list',
205
            'client.set-tmp-pwd', 'contact.set-verified', 'client.block', 'client.unblock',
206
            'client.get-note', 'client.set-note', 'client.set-description',
207
            'bill.read',
208
            'purse.update', 'purse.read',
209
            'sale.read', 'sale.delete', 'sale.create', 'sale.update',
210
            'plan.read', 'plan.create', 'plan.update', 'plan.delete', 'plan.force-read',
211
            'price.read', 'price.create', 'price.update', 'price.delete',
212
            'domain.read', 'domain.update', 'domain.delete', 'domain.delete-agp', 'domain.set-nss',
213
            'domain.pay', 'domain.push',
214
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
215
            'certificate.read', 'certificate.create', 'certificate.update', 'certificate.delete', 'certificate.pay', 'certificate.push',
216
            'contact.read', 'contact.create', 'contact.update', 'contact.delete', 'contact.force-verify',
217
            'server.read', 'server.pay', 'server.sell', 'server.control-power', 'server.control-system', 'server.enable-block', 'server.disable-block', 'server.set-label', 'server.set-note',
218
            'server.see-label',
219
            'consumption.read', 'consumption.update', 'consumption.delete',
220
            'document.read', 'document.create', 'document.update', 'document.delete',
221
            'document.generate', 'document.acceptance', 'document.invoice',
222
            'mailing.prepare', 'mailing.send',
223
            'account.read', 'account.create', 'account.update', 'account.delete',
224
            'bill.read', 'plan.read', 'finance.read',
225
            'backup.read', 'backup.delete',
226
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
227
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
228
            'db.read', 'db.create', 'db.update', 'db.delete',
229
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
230
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
231
            'request.read', 'request.create', 'request.update', 'request.delete',
232
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
233
            'ip.read', 'service.read', 'client.notify',
234
        ]);
235
    }
236
237
    public function testReseller()
238
    {
239
        $this->assertAccesses('role:reseller', [
240
            'deposit', 'have-goods',
241
            'access-subclients', 'support', 'manage', 'resell',
242
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close', 'ticket.update', 'ticket.delete',
243
            'client.read', 'client.create', 'client.update', 'client.delete', 'client.list',
244
            'client.set-tmp-pwd', 'contact.set-verified', 'client.block', 'client.unblock',
245
            'client.get-note', 'client.set-note', 'client.set-description',
246
            'bill.read', 'bill.create', 'bill.update', 'bill.delete',
247
            'plan.read', 'plan.create', 'plan.update', 'plan.delete', 'plan.force-read',
248
            'price.read', 'price.create', 'price.update', 'price.delete',
249
            'sale.read', 'sale.delete', 'sale.create', 'sale.update',
250
            'purse.update', 'purse.read', 'purse.create',
251
            'domain.read', 'domain.update', 'domain.delete', 'domain.pay', 'domain.push', 'domain.delete-agp', 'domain.set-nss',
252
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
253
            'certificate.read', 'certificate.create', 'certificate.update', 'certificate.delete', 'certificate.pay', 'certificate.push',
254
            'server.read', 'server.pay', 'server.sell', 'server.control-power', 'server.control-system', 'server.enable-block', 'server.disable-block', 'server.set-label', 'server.set-note',
255
            'server.see-label',
256
            'consumption.read', 'consumption.update', 'consumption.delete',
257
            'document.read', 'document.create', 'document.update', 'document.delete',
258
            'document.generate', 'document.acceptance', 'document.invoice',
259
            'contact.read', 'contact.create', 'contact.update', 'contact.delete', 'contact.force-verify',
260
            'mailing.prepare', 'mailing.send',
261
            'account.read', 'account.create', 'account.update', 'account.delete',
262
            'bill.read', 'plan.read', 'finance.read',
263
            'backup.read', 'backup.delete',
264
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
265
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
266
            'db.read', 'db.create', 'db.update', 'db.delete',
267
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
268
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
269
            'request.read', 'request.create', 'request.update', 'request.delete',
270
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
271
            'ip.read', 'service.read', 'client.notify',
272
            'integration.read', 'integration.create', 'integration.update', 'integration.delete',
273
        ]);
274
    }
275
276
    public function testEmployee()
277
    {
278
        $this->assertAccesses('role:employee', [
279
            'restore-password', 'deposit',
280
            'contact.read', 'contact.create', 'contact.update', 'contact.delete',
281
            'document.read', 'document.create', 'document.acceptance',
282
            'bill.read', 'employee.read', 'finance.read',
283
        ]);
284
    }
285
286
    public function testMighty()
287
    {
288
        $this->auth->setAssignments('role:admin,role:manager,role:document.master,role:finance.master,role:stock.master,role:config.manager,domain.freeze,domain.force-push,domain.delete,employee.read,domain.force-send-foa,deny:deposit', 'user:mighty');
289
290
        $this->assertAccesses('user:mighty', [
291
            'access-subclients', 'access-reseller',
292
            'support', 'manage', 'admin',
293
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close', 'ticket.update', 'ticket.delete',
294
            'client.read', 'client.create', 'client.update', 'client.delete', 'client.list',
295
            'client.set-tmp-pwd', 'contact.set-verified', 'client.block', 'client.unblock',
296
            'client.get-note', 'client.set-note', 'client.set-description',
297
            'bill.read', 'bill.create', 'bill.update', 'bill.delete',
298
            'plan.read', 'plan.create', 'plan.update', 'plan.delete', 'plan.force-read',
299
            'price.read', 'price.create', 'price.update', 'price.delete',
300
            'sale.read', 'sale.delete', 'sale.create', 'sale.update',
301
            'domain.freeze',
302
            'domain.read', 'domain.update', 'domain.delete', 'domain.delete-agp', 'domain.set-nss',
303
            'domain.pay', 'domain.push', 'domain.force-push', 'domain.force-send-foa',
304
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
305
            'certificate.read', 'certificate.create', 'certificate.update', 'certificate.delete', 'certificate.pay', 'certificate.push',
306
307
            'server.read', 'server.create', 'server.update', 'server.delete', 'server.pay', 'server.sell',
308
            'server.control-power', 'server.control-system', 'server.wizzard', 'server.manage-settings',
309
310
            'purse.update', 'purse.read', 'purse.create',
311
312
            'server.enable-block', 'server.disable-block', 'server.set-label', 'server.set-note', 'server.see-label',
313
            'hub.read', 'hub.create', 'hub.update', 'hub.delete',
314
            'config.read', 'config.create', 'config.update', 'config.delete',
315
            'consumption.read', 'consumption.update', 'consumption.delete',
316
            'document.read', 'document.create', 'document.update', 'document.delete',
317
            'document.generate', 'document.generate-all',
318
            'document.acceptance', 'document.invoice',
319
            'contact.read', 'contact.create', 'contact.update', 'contact.delete', 'contact.force-verify',
320
            'mailing.prepare', 'mailing.send',
321
            'stock.read',
322
            'part.read', 'part.create', 'part.update', 'part.delete',
323
            'order.read', 'order.read', 'order.create', 'order.update', 'order.delete', 'order.read-profits',
324
            'move.read', 'move.create', 'move.update', 'move.delete', 'move.read-all', 'move.get-directions',
325
            'model.read', 'model.create', 'model.update', 'model.delete',
326
            'employee.read', 'client.notify',
327
            'account.read', 'account.create', 'account.update', 'account.delete',
328
            'bill.read', 'plan.read', 'finance.read',
329
            'backup.read', 'backup.delete',
330
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
331
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
332
            'db.read', 'db.create', 'db.update', 'db.delete',
333
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
334
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
335
            'request.read', 'request.create', 'request.update', 'request.delete',
336
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
337
            'ip.read', 'ip.create', 'ip.update', 'ip.delete',
338
            'service.read', 'service.create', 'service.update', 'service.delete',
339
        ]);
340
    }
341
342
    public function testAlmighty()
343
    {
344
        $this->assertAccesses('role:almighty', [
345
            'access-subclients', 'access-reseller',
346
            'support', 'manage', 'admin',
347
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close', 'ticket.update', 'ticket.delete',
348
            'client.read', 'client.create', 'client.update', 'client.delete', 'client.list',
349
            'client.set-tmp-pwd', 'contact.set-verified', 'client.block', 'client.unblock',
350
            'client.get-note', 'client.set-note', 'client.set-description',
351
            'bill.read', 'bill.create', 'bill.update', 'bill.delete',
352
            'plan.read', 'plan.create', 'plan.update', 'plan.delete', 'plan.force-read',
353
            'price.read', 'price.create', 'price.update', 'price.delete',
354
            'sale.read', 'sale.delete', 'sale.create', 'sale.update',
355
            'domain.freeze',
356
            'domain.read', 'domain.update', 'domain.delete', 'domain.delete-agp', 'domain.set-nss',
357
            'domain.pay', 'domain.push', 'domain.force-push', 'domain.force-send-foa',
358
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
359
            'certificate.read', 'certificate.create', 'certificate.update', 'certificate.delete', 'certificate.pay', 'certificate.push',
360
361
            'server.read', 'server.create', 'server.update', 'server.delete', 'server.pay', 'server.sell',
362
            'server.control-power', 'server.control-system', 'server.wizzard', 'server.manage-settings',
363
364
            'purse.update', 'purse.read', 'purse.create',
365
366
            'server.enable-block', 'server.disable-block', 'server.set-label', 'server.set-note', 'server.see-label',
367
            'hub.read', 'hub.create', 'hub.update', 'hub.delete',
368
            'config.read', 'config.create', 'config.update', 'config.delete',
369
            'consumption.read', 'consumption.update', 'consumption.delete',
370
            'document.read', 'document.create', 'document.update', 'document.delete',
371
            'document.generate', 'document.generate-all',
372
            'document.acceptance', 'document.invoice',
373
            'contact.read', 'contact.create', 'contact.update', 'contact.delete', 'contact.force-verify',
374
            'mailing.prepare', 'mailing.send',
375
            'stock.read',
376
            'part.read', 'part.create', 'part.update', 'part.delete',
377
            'order.read', 'order.read', 'order.create', 'order.update', 'order.delete', 'order.read-profits',
378
            'move.read', 'move.create', 'move.update', 'move.delete', 'move.read-all', 'move.get-directions',
379
            'model.read', 'model.create', 'model.update', 'model.delete',
380
            'employee.read', 'client.notify',
381
            'account.read', 'account.create', 'account.update', 'account.delete',
382
            'bill.read', 'plan.read', 'finance.read',
383
            'backup.read', 'backup.delete',
384
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
385
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
386
            'db.read', 'db.create', 'db.update', 'db.delete',
387
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
388
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
389
            'request.read', 'request.create', 'request.update', 'request.delete',
390
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete',
391
            'ip.read', 'ip.create', 'ip.update', 'ip.delete',
392
            'service.read', 'service.create', 'service.update', 'service.delete',
393
        ]);
394
    }
395
396
    public function testLimited()
397
    {
398
        $this->auth->setAssignments('role:client,deny:deposit,deny:domain.push,deny:server.pay,deny:server.read,deny:server.control-power,deny:server.control-system,deny:server.set-note,deny:ip.read,deny:service.read,deny:domain.delete-agp,deny:domain.set-nss', 'user:limited');
399
400
        $this->assertAccesses('user:limited', [
401
            'have-goods',
402
            'ticket.read', 'ticket.create', 'ticket.answer', 'ticket.close',
403
            'domain.read', 'domain.update', 'domain.pay',
404
            'dns.create', 'dns.read', 'dns.update', 'dns.delete',
405
            'certificate.read', 'certificate.create', 'certificate.update', 'certificate.pay', 'certificate.push',
406
            'document.read', 'document.create', 'document.invoice',
407
            'contact.read', 'contact.create', 'contact.update', 'contact.delete',
408
            'account.read', 'account.create', 'account.update', 'account.delete',
409
            'restore-password', 'bill.read', 'plan.read', 'finance.read', 'price.read', 'sale.read',
410
            'backup.read', 'backup.delete',
411
            'backuping.read', 'backuping.create', 'backuping.update', 'backuping.delete',
412
            'crontab.read', 'crontab.create', 'crontab.update', 'crontab.delete',
413
            'db.read', 'db.create', 'db.update', 'db.delete',
414
            'hdomain.read', 'hdomain.create', 'hdomain.update', 'hdomain.delete', 'hdomain.set-dns',
415
            'mail.read', 'mail.create', 'mail.update', 'mail.delete',
416
            'request.read', 'request.create', 'request.update', 'request.delete',
417
            'vhost.read', 'vhost.create', 'vhost.update', 'vhost.delete', 'client.notify',
418
        ]);
419
    }
420
421
    public function testJuniorManager()
422
    {
423
        $this->assertAccesses('role:junior-manager', [
424
            'access-subclients', 'access-reseller',
425
            'client.read', 'server.read', 'consumption.read',
426
            'plan.force-read', 'plan.read', 'document.read', 'finance.read',
427
            'stock.read', 'part.read', 'move.read', 'model.read', 'order.read', 'move.get-directions',
428
            'hub.read', 'client.list', 'contact.read', 'bill.read',
429
        ]);
430
    }
431
432
    public function testBetaTester()
433
    {
434
        $this->auth->setAssignments('role:beta-tester', 'user:beta-tester');
435
436
        $this->assertAccesses('user:beta-tester', [
437
            'test.beta',
438
        ]);
439
    }
440
441
    public function testAlphaTester()
442
    {
443
        $this->auth->setAssignments('role:alpha-tester', 'user:alpha-tester');
444
445
        $this->assertAccesses('user:alpha-tester', [
446
            'test.alpha', 'test.beta',
447
        ]);
448
    }
449
450
    public function testSuperPowers()
451
    {
452
        $this->assertAccesses('role:superpowers', [
453
            'see-no-mans', 'part.sell', 'client.set-others-allowed-ips',
454
        ]);
455
    }
456
}
457