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; + } + } +}