newslash
Revisión | 8a849c2aa8d36b94d6cd913aead78d01d516c39c (tree) |
---|---|
Tiempo | 2019-06-17 17:36:04 |
Autor | ![]() |
Commiter | hylom |
Plugin::ResponseFilter: fix to apply timeline results
@@ -14,8 +14,31 @@ sub register { | ||
14 | 14 | submissions => { 1000 => [qw(ipid subnetid note comment)] }, |
15 | 15 | }; |
16 | 16 | $cnf->{faculities} ||= $default_faculities; |
17 | - $cnf->{enable} = 0 if !defined $cnf->{enable}; | |
17 | + $cnf->{enable} //= 0; | |
18 | 18 | $app->helper(apply_seclev_filter => sub { apply_seclev_filter(@_) }); |
19 | + | |
20 | + if ($cnf->{enable}) { | |
21 | + $app->hook(before_render => sub { | |
22 | + my ($c, $args) = @_; | |
23 | + return if (!defined $args->{json}); | |
24 | + | |
25 | + my $json = $args->{json}; | |
26 | + my $result = $json->{result} || $json; | |
27 | + if ($result->{item}) { | |
28 | + if ($result->{item}->{content_type}) { | |
29 | + apply_seclev_filter($c, $result->{item}->{content_type}, $result->{item}); | |
30 | + } | |
31 | + } | |
32 | + | |
33 | + if ($result->{items} && ref($result->{items}) eq "ARRAY") { | |
34 | + for my $item (@{$result->{items}}) { | |
35 | + if ($item->{content_type}) { | |
36 | + apply_seclev_filter($c, $item->{content_type}, $item); | |
37 | + } | |
38 | + } | |
39 | + } | |
40 | + }); | |
41 | + } | |
19 | 42 | } |
20 | 43 | |
21 | 44 | sub apply_seclev_filter { |
@@ -35,21 +58,38 @@ sub apply_seclev_filter { | ||
35 | 58 | |
36 | 59 | my $cnf = $c->config->{ResponseFilter} || {}; |
37 | 60 | my $faculties = $cnf->{faculities} || {}; |
38 | - my $faculty = $faculties->{$model}; | |
39 | - if (!$faculty) { | |
40 | - $c->app->log->debug("no faculty found for $model"); | |
41 | - return; | |
61 | + | |
62 | + #warn Dumper $faculties; | |
63 | + | |
64 | + my $faculty_all = $faculties->{all} || {}; | |
65 | + for my $lv (keys %$faculty_all) { | |
66 | + if ($security_level < $lv) { | |
67 | + for my $item (@$targets) { | |
68 | + for my $k (@{$faculty_all->{$lv}}) { | |
69 | + if (defined $item->{$k}) { | |
70 | + delete $item->{$k}; | |
71 | + #$c->app->log->debug("remove $k"); | |
72 | + } | |
73 | + } | |
74 | + } | |
75 | + } | |
42 | 76 | } |
43 | 77 | |
78 | + my $faculty = $faculties->{$model} || {}; | |
44 | 79 | for my $lv (keys %$faculty) { |
45 | 80 | if ($security_level < $lv) { |
46 | 81 | for my $item (@$targets) { |
47 | 82 | for my $k (@{$faculty->{$lv}}) { |
48 | - delete $item->{$k} if defined $item->{$k}; | |
83 | + if (defined $item->{$k}) { | |
84 | + delete $item->{$k}; | |
85 | + #$c->app->log->debug("remove $k"); | |
86 | + } | |
49 | 87 | } |
50 | 88 | } |
51 | 89 | } |
52 | 90 | } |
91 | + | |
92 | + | |
53 | 93 | return $items; |
54 | 94 | } |
55 | 95 |
@@ -75,7 +75,7 @@ sub post { | ||
75 | 75 | my $ret = {}; |
76 | 76 | my $result = $comments->select(cid => $cid, |
77 | 77 | security_level => $user->{seclev}); |
78 | - $c->apply_seclev_filter("comments", $result); | |
78 | + $c->apply_seclev_filter("comment", $result); | |
79 | 79 | |
80 | 80 | if ($result) { |
81 | 81 | $ret->{type} = "comment"; |
@@ -134,7 +134,7 @@ sub get { | ||
134 | 134 | } |
135 | 135 | my $rs = $comments->select($key => $value); |
136 | 136 | |
137 | - $c->apply_seclev_filter("comments", $rs); | |
137 | + $c->apply_seclev_filter("comment", $rs); | |
138 | 138 | |
139 | 139 | if (!defined $rs) { |
140 | 140 | $c->render(json => { error => 1, message => 'invalid request' }); |
@@ -17,7 +17,7 @@ sub get { | ||
17 | 17 | } |
18 | 18 | else { |
19 | 19 | my $m2s = $metamoderations->select(cid => $cid); |
20 | - $c->apply_seclev_filter("metamoderations", $m2s); | |
20 | + $c->apply_seclev_filter("metamoderation", $m2s); | |
21 | 21 | |
22 | 22 | if ($m2s) { |
23 | 23 | my $hashed_m2s = {}; |
@@ -18,7 +18,7 @@ sub get { | ||
18 | 18 | } |
19 | 19 | my $submissions = $c->model('submissions'); |
20 | 20 | my $submission = $submissions->select(submission_id => $subid); |
21 | - $c->apply_seclev_filter("submissions", $submission); | |
21 | + $c->apply_seclev_filter("submission", $submission); | |
22 | 22 | |
23 | 23 | if (!$submission) { |
24 | 24 | $c->render(json => { err => 1, message => "not_found" }); |
@@ -57,7 +57,7 @@ sub list { | ||
57 | 57 | order_by => {create_time => "DESC"}, |
58 | 58 | limit => $limit, |
59 | 59 | skip => $skip); |
60 | - $c->apply_seclev_filter("submissions", $items); | |
60 | + $c->apply_seclev_filter("submission", $items); | |
61 | 61 | |
62 | 62 | if (!$items) { |
63 | 63 | $message = $submissions->last_error; |