diff --git a/extensions/approval/bootstrap.php b/extensions/approval/bootstrap.php index 43c6b294b..4ced07b3b 100644 --- a/extensions/approval/bootstrap.php +++ b/extensions/approval/bootstrap.php @@ -10,6 +10,7 @@ */ use Flarum\Approval\Listener; +use Flarum\Approval\Access; use Illuminate\Contracts\Events\Dispatcher; return function (Dispatcher $events) { @@ -18,4 +19,6 @@ return function (Dispatcher $events) { $events->subscribe(Listener\ApproveContent::class); $events->subscribe(Listener\HideUnapprovedContent::class); $events->subscribe(Listener\UnapproveNewContent::class); + + $events->subscribe(Access\TagPolicy::class); }; diff --git a/extensions/approval/src/Access/TagPolicy.php b/extensions/approval/src/Access/TagPolicy.php new file mode 100755 index 000000000..dcc65f824 --- /dev/null +++ b/extensions/approval/src/Access/TagPolicy.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Approval\Access; + +use Flarum\Core\Access\AbstractPolicy; +use Flarum\Core\User; +use Flarum\Tags\Tag; + +class TagPolicy extends AbstractPolicy +{ + /** + * {@inheritdoc} + */ + protected $model = Tag::class; + + /** + * @param User $actor + * @param Tag $tag + * @return bool|null + */ + public function addToDiscussion(User $actor, Tag $tag) + { + $disallowedTags = Tag::getIdsWhereCannot($actor, 'discussion.startWithoutApproval'); + + if (in_array($tag->id, $disallowedTags)) { + return false; + } + } +}