22
33namespace CasbinAdapter \Database ;
44
5- use Casbin \Exceptions \CasbinException ;
65use Casbin \Persist \Adapter as AdapterContract ;
76use TechOne \Database \Manager ;
87use Casbin \Persist \AdapterHelper ;
@@ -36,61 +35,8 @@ public static function newAdapter(array $config)
3635
3736 public function initTable ()
3837 {
39- if ('pgsql ' == $ this ->config ['type ' ]) {
40- $ sql = <<<EOT
41- CREATE TABLE IF NOT EXISTS $ this ->casbinRuleTableName (
42- id bigserial NOT NULL,
43- ptype varchar(255) NOT NULL,
44- v0 varchar(255) DEFAULT NULL,
45- v1 varchar(255) DEFAULT NULL,
46- v2 varchar(255) DEFAULT NULL,
47- v3 varchar(255) DEFAULT NULL,
48- v4 varchar(255) DEFAULT NULL,
49- v5 varchar(255) DEFAULT NULL,
50- PRIMARY KEY (id)
51- );
52- EOT ;
53- } elseif ('sqlite ' == $ this ->config ['type ' ]) {
54- $ sql = <<<EOT
55- CREATE TABLE IF NOT EXISTS ` $ this ->casbinRuleTableName ` (
56- `id` INTEGER PRIMARY KEY AUTOINCREMENT ,
57- `ptype` varchar(255) NOT NULL,
58- `v0` varchar(255) DEFAULT NULL,
59- `v1` varchar(255) DEFAULT NULL,
60- `v2` varchar(255) DEFAULT NULL,
61- `v3` varchar(255) DEFAULT NULL,
62- `v4` varchar(255) DEFAULT NULL,
63- `v5` varchar(255) DEFAULT NULL
64- );
65- EOT ;
66- } elseif ('sqlsrv ' == $ this ->config ['type ' ]) {
67- $ sql = <<<EOT
68- CREATE TABLE IF NOT EXISTS ` $ this ->casbinRuleTableName ` (
69- id int IDENTITY(1,1),
70- ptype varchar(255) NOT NULL,
71- v0 varchar(255) DEFAULT NULL,
72- v1 varchar(255) DEFAULT NULL,
73- v2 varchar(255) DEFAULT NULL,
74- v3 varchar(255) DEFAULT NULL,
75- v4 varchar(255) DEFAULT NULL,
76- v5 varchar(255) DEFAULT NULL
77- );
78- EOT ;
79- } else {
80- $ sql = <<<EOT
81- CREATE TABLE IF NOT EXISTS ` $ this ->casbinRuleTableName ` (
82- `id` int(11) NOT NULL AUTO_INCREMENT,
83- `ptype` varchar(255) NOT NULL,
84- `v0` varchar(255) DEFAULT NULL,
85- `v1` varchar(255) DEFAULT NULL,
86- `v2` varchar(255) DEFAULT NULL,
87- `v3` varchar(255) DEFAULT NULL,
88- `v4` varchar(255) DEFAULT NULL,
89- `v5` varchar(255) DEFAULT NULL,
90- PRIMARY KEY (`id`)
91- );
92- EOT ;
93- }
38+ $ sql = file_get_contents (__DIR__ .'/../migrations/ ' .$ this ->config ['type ' ].'.sql ' );
39+ $ sql = str_replace ('%table_name% ' , $ this ->casbinRuleTableName , $ sql );
9440 $ this ->connection ->execute ($ sql , []);
9541 }
9642
@@ -150,9 +96,6 @@ public function removePolicy($sec, $ptype, $rule)
15096 $ where ['v ' .strval ($ key )] = $ value ;
15197 $ condition [] = 'v ' .strval ($ key ).' = : ' .'v ' .strval ($ key );
15298 }
153- if (empty ($ condition )) {
154- return ;
155- }
15699
157100 $ sql = 'DELETE FROM ' .$ this ->casbinRuleTableName .' WHERE ' .implode (' AND ' , $ condition );
158101
@@ -161,6 +104,17 @@ public function removePolicy($sec, $ptype, $rule)
161104
162105 public function removeFilteredPolicy ($ sec , $ ptype , $ fieldIndex , ...$ fieldValues )
163106 {
164- throw new CasbinException ('not implemented ' );
107+ $ where ['ptype ' ] = $ ptype ;
108+ $ condition [] = 'ptype = :ptype ' ;
109+ foreach (range (0 , 5 ) as $ value ) {
110+ if ($ fieldIndex <= $ value && $ value < $ fieldIndex + count ($ fieldValues )) {
111+ $ where ['v ' .strval ($ value )] = $ fieldValues [$ value - $ fieldIndex ];
112+ $ condition [] = 'v ' .strval ($ value ).' = : ' .'v ' .strval ($ value );
113+ }
114+ }
115+
116+ $ sql = 'DELETE FROM ' .$ this ->casbinRuleTableName .' WHERE ' .implode (' AND ' , $ condition );
117+
118+ return $ this ->connection ->execute ($ sql , $ where );
165119 }
166120}
0 commit comments