-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWordPressAccessController.php
More file actions
85 lines (76 loc) · 1.84 KB
/
WordPressAccessController.php
File metadata and controls
85 lines (76 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
namespace DataKit\Plugin\AccessControl;
use DataKit\DataViews\AccessControl\AccessController;
use DataKit\DataViews\AccessControl\Capability\Capability;
use DataKit\DataViews\AccessControl\ReadOnlyAccessController;
use WP_User;
/**
* Access Controller backed by a {@see WP_User}.
*
* @since $ver$
*/
final class WordPressAccessController implements AccessController {
/**
* The user to test against.
*
* @since $ver$
*
* @var WP_User|null
*/
private ?WP_User $user;
/**
* The previous access controller.
*
* @since $ver$
*
* @var AccessController
*/
private AccessController $previous;
/**
* Creates the Access Controller.
*
* @since $ver$
*
* @param WP_User|null $user The user to test against.
*/
public function __construct( ?WP_User $user ) {
$this->user = $user;
$this->previous = new ReadOnlyAccessController();
}
/**
* {@inheritDoc}
*
* @since $ver$
*/
public function can( Capability $capability ): bool {
$can = $this->previous->can( $capability );
if ( ! $can && $this->user && $this->user->exists() ) {
$can = $this->user->has_cap( 'administrator' );
}
return $this->filter_result( $can, $capability );
}
/**
* Applies filter on the result.
*
* @since $ver$
*
* @param bool $can The result to return.
* @param Capability $capability The capability.
*
* @return bool The filtered result.
*/
private function filter_result( bool $can, Capability $capability ): bool {
/**
* Modifies the capability check.
*
* @filter `datakit/access-control/can`
*
* @since $ver$
*
* @param bool $can Whether the user can.
* @param Capability $capability Whether the user can.
* @param ?WP_User $user The WP_User.
*/
return (bool) apply_filters( 'datakit/access-control/can', $can, $capability, $this->user );
}
}