From ffa5e8b8c78a5868a2c7009470c1494879fc41ac Mon Sep 17 00:00:00 2001 From: Franz Liedke Date: Thu, 13 Apr 2017 08:22:08 +0200 Subject: [PATCH] Disallow editing if discussions are locked Fixes flarum/core#1156. --- extensions/lock/bootstrap.php | 1 + extensions/lock/src/Access/PostPolicy.php | 37 +++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100755 extensions/lock/src/Access/PostPolicy.php diff --git a/extensions/lock/bootstrap.php b/extensions/lock/bootstrap.php index 46f9a2e84..6544ae40b 100644 --- a/extensions/lock/bootstrap.php +++ b/extensions/lock/bootstrap.php @@ -21,4 +21,5 @@ return function (Dispatcher $events) { $events->subscribe(Listener\SaveLockedToDatabase::class); $events->subscribe(Access\DiscussionPolicy::class); + $events->subscribe(Access\PostPolicy::class); }; diff --git a/extensions/lock/src/Access/PostPolicy.php b/extensions/lock/src/Access/PostPolicy.php new file mode 100755 index 000000000..596ee4428 --- /dev/null +++ b/extensions/lock/src/Access/PostPolicy.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\Lock\Access; + +use Flarum\Core\Access\AbstractPolicy; +use Flarum\Core\User; +use Flarum\Core\Post; + +class PostPolicy extends AbstractPolicy +{ + /** + * {@inheritdoc} + */ + protected $model = Post::class; + + /** + * @param User $actor + * @param Post $post + * @return bool + */ + public function edit(User $actor, Post $post) + { + $discussion = $post->discussion; + if ($discussion->is_locked && $actor->cannot('lock', $discussion)) { + return false; + } + } +}