-
Notifications
You must be signed in to change notification settings - Fork 330
/
Factory.php
167 lines (143 loc) · 3.37 KB
/
Factory.php
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?php
namespace Silber\Bouncer;
use Illuminate\Auth\Access\Gate;
use Illuminate\Cache\ArrayStore;
use Illuminate\Container\Container;
use Illuminate\Contracts\Cache\Store;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Silber\Bouncer\Contracts\Clipboard as ClipboardContract;
class Factory
{
/**
* The cache instance to use for the clipboard.
*
* @var \Illuminate\Contracts\Cache\Store
*/
protected $cache;
/**
* The clipboard instance to use.
*
* @var \Silber\Bouncer\Contracts\Clipboard
*/
protected $clipboard;
/**
* The gate instance to use.
*
* @var \Illuminate\Contracts\Auth\Access\Gate
*/
protected $gate;
/**
* The user model to use for the gate.
*
* @var mixed
*/
protected $user;
/**
* Create a new Factory instance.
*
* @param mixed $user
*/
public function __construct($user = null)
{
$this->user = $user;
}
/**
* Create an instance of Bouncer.
*
* @return \Silber\Bouncer\Bouncer
*/
public function create()
{
$clipboard = $this->getClipboard();
$clipboard->registerAt($gate = $this->getGate());
return (new Bouncer($clipboard))->setGate($gate);
}
/**
* Set the cache instance to use for the clipboard.
*
* @param \Illuminate\Contracts\Cache\Store $cache
* @return $this
*/
public function withCache(Store $cache)
{
$this->cache = $cache;
return $this;
}
/**
* Set the instance of the clipboard to use.
*
* @param \Silber\Bouncer\Contracts\Clipboard $clipboard
* @return $this
*/
public function withClipboard(ClipboardContract $clipboard)
{
$this->clipboard = $clipboard;
return $this;
}
/**
* Set the gate instance to use.
*
* @param \Illuminate\Contracts\Auth\Access\Gate $gate
* @return $this
*/
public function withGate(GateContract $gate)
{
$this->gate = $gate;
return $this;
}
/**
* Set the user model to use for the gate.
*
* @param mixed $user
* @return $this
*/
public function withUser($user)
{
$this->user = $user;
return $this;
}
/**
* Get an instance of the clipboard.
*
* @return \Silber\Bouncer\Contracts\Clipboard
*/
protected function getClipboard()
{
return $this->clipboard ?: new CachedClipboard($this->getCacheStore());
}
/**
* Get an instance of the cache store.
*
* @return \Illuminate\Contracts\Cache\Store
*/
protected function getCacheStore()
{
return $this->cache ?: new ArrayStore;
}
/**
* Get an instance of the gate.
*
* @return \Illuminate\Contracts\Auth\Access\Gate
*/
protected function getGate()
{
if ($this->gate) {
return $this->gate;
}
return new Gate($this->getContainer(), function () {
return $this->user;
});
}
/**
* Get the container singleton.
*
* @return \Illuminate\Container\Container
*/
protected function getContainer()
{
if (is_null(Container::getInstance())) {
Container::setInstance(new Container);
}
return Container::getInstance();
}
}