@@ -27,6 +27,7 @@ class AuthItem extends \yii\base\Model
27
27
public $ description ;
28
28
public $ ruleName ;
29
29
public $ data ;
30
+ private $ _data ;
30
31
31
32
/**
32
33
* @var Item
@@ -66,7 +67,8 @@ public function rules()
66
67
}],
67
68
[['type ' ], 'integer ' ],
68
69
[['description ' , 'data ' , 'ruleName ' ], 'default ' ],
69
- [['name ' ], 'string ' , 'max ' => 64 ]
70
+ [['name ' ], 'string ' , 'max ' => 64 ],
71
+ [['data ' ], 'jsonDecode ' ],
70
72
];
71
73
}
72
74
@@ -84,6 +86,38 @@ public function unique()
84
86
}
85
87
}
86
88
89
+ public function jsonDecode ()
90
+ {
91
+ if (is_array ($ this ->data )) {
92
+ $ this ->addError ('data ' , Yii::t ('rbac-admin ' , 'Invalid JSON data. ' ));
93
+ return ;
94
+ }
95
+ $ decode = json_decode ((string ) $ this ->data , true );
96
+ switch (json_last_error ()) {
97
+ case JSON_ERROR_NONE :
98
+ $ this ->_data = $ decode ;
99
+ break ;
100
+ case JSON_ERROR_DEPTH :
101
+ $ this ->addError ('data ' , 'The maximum stack depth has been exceeded. ' );
102
+ break ;
103
+ case JSON_ERROR_CTRL_CHAR :
104
+ $ this ->addError ('data ' , 'Control character error, possibly incorrectly encoded. ' );
105
+ break ;
106
+ case JSON_ERROR_SYNTAX :
107
+ $ this ->addError ('data ' , 'Syntax error. ' );
108
+ break ;
109
+ case JSON_ERROR_STATE_MISMATCH :
110
+ $ this ->addError ('data ' , 'Invalid or malformed JSON. ' );
111
+ break ;
112
+ case JSON_ERROR_UTF8 :
113
+ $ this ->addError ('data ' , 'Malformed UTF-8 characters, possibly incorrectly encoded. ' );
114
+ break ;
115
+ default :
116
+ $ this ->addError ('data ' , 'Unknown JSON decoding error. ' );
117
+ break ;
118
+ }
119
+ }
120
+
87
121
/**
88
122
* @inheritdoc
89
123
*/
@@ -145,7 +179,7 @@ public function save()
145
179
$ this ->_item ->name = $ this ->name ;
146
180
$ this ->_item ->description = $ this ->description ;
147
181
$ this ->_item ->ruleName = $ this ->ruleName ;
148
- $ this ->_item ->data = $ this ->data === null || $ this -> data === '' ? null : Json:: decode ( $ this -> data ) ;
182
+ $ this ->_item ->data = $ this ->_data ;
149
183
if ($ isNew ) {
150
184
$ manager ->add ($ this ->_item );
151
185
} else {
0 commit comments