1+ <?php
2+ /**
3+ * Created by PhpStorm.
4+ * User: Administrator
5+ * Date: 2019/3/16
6+ * Time: 18:09
7+ */
8+
9+ namespace rabbit \casbin ;
10+
11+
12+ use Casbin \Exceptions \CasbinException ;
13+ use Casbin \Persist \Adapter as AdapterContract ;
14+ use Casbin \Persist \AdapterHelper ;
15+ use rabbit \casbin \Model \CasbinRule ;
16+
17+ /**
18+ * Class Adapter
19+ * @package rabbit\casbin
20+ */
21+ class Adapter implements AdapterContract
22+ {
23+ use AdapterHelper;
24+ /** @var CasbinRule */
25+ protected $ casbinRule ;
26+
27+ public function __construct (CasbinRule $ casbinRule )
28+ {
29+ $ this ->casbinRule = $ casbinRule ;
30+ }
31+
32+ /**
33+ * @param array $ptype
34+ * @param array $rule
35+ */
36+ public function savePolicyLine (array $ ptype , array $ rule )
37+ {
38+ $ col ['ptype ' ] = $ ptype ;
39+ foreach ($ rule as $ key => $ value ) {
40+ $ col ['v ' . strval ($ key ) . '' ] = $ value ;
41+ }
42+ $ ar = clone $ this ->casbinRule ;
43+ $ ar ->setAttributes ($ col );
44+ $ ar ->save ();
45+ }
46+
47+ /**
48+ * @param \Casbin\Model\Model $model
49+ * @return mixed|void
50+ */
51+ public function loadPolicy ($ model )
52+ {
53+ $ ar = clone $ this ->casbinRule ;
54+ $ rows = $ ar ->find ()->all ();
55+ foreach ($ rows as $ row ) {
56+ $ line = implode (', ' , array_slice (array_values ($ row ->toArray ()), 1 ));
57+ $ this ->loadPolicyLine (trim ($ line ), $ model );
58+ }
59+ }
60+
61+ /**
62+ * @param \Casbin\Model\Model $model
63+ * @return bool
64+ */
65+ public function savePolicy ($ model )
66+ {
67+ foreach ($ model ->model ['p ' ] as $ ptype => $ ast ) {
68+ foreach ($ ast ->policy as $ rule ) {
69+ $ this ->savePolicyLine ($ ptype , $ rule );
70+ }
71+ }
72+ foreach ($ model ->model ['g ' ] as $ ptype => $ ast ) {
73+ foreach ($ ast ->policy as $ rule ) {
74+ $ this ->savePolicyLine ($ ptype , $ rule );
75+ }
76+ }
77+ return true ;
78+ }
79+
80+ /**
81+ * @param string $sec
82+ * @param string $ptype
83+ * @param array $rule
84+ * @return mixed|void
85+ */
86+ public function addPolicy ($ sec , $ ptype , $ rule )
87+ {
88+ return $ this ->savePolicyLine ($ ptype , $ rule );
89+ }
90+
91+ /**
92+ * @param string $sec
93+ * @param string $ptype
94+ * @param array $rule
95+ * @return mixed
96+ */
97+ public function removePolicy ($ sec , $ ptype , $ rule )
98+ {
99+ $ result = $ this ->casbinRule ->where ('ptype ' , $ ptype );
100+ foreach ($ rule as $ key => $ value ) {
101+ $ result ->where ('v ' . strval ($ key ), $ value );
102+ }
103+ return $ result ->delete ();
104+ }
105+
106+ /**
107+ * @param string $sec
108+ * @param string $ptype
109+ * @param int $fieldIndex
110+ * @param mixed ...$fieldValues
111+ * @return mixed|void
112+ * @throws CasbinException
113+ */
114+ public function removeFilteredPolicy ($ sec , $ ptype , $ fieldIndex , ...$ fieldValues )
115+ {
116+ throw new CasbinException ('not implemented ' );
117+ }
118+ }
0 commit comments