mirror of
https://github.com/flarum/core.git
synced 2025-07-21 08:41:17 +02:00
Update core permissions stuff
This commit is contained in:
@@ -182,16 +182,6 @@ class CoreServiceProvider extends ServiceProvider
|
|||||||
|
|
||||||
public function registerPermissions()
|
public function registerPermissions()
|
||||||
{
|
{
|
||||||
$this->extend(
|
|
||||||
new Permission('forum.view'),
|
|
||||||
new Permission('forum.startDiscussion'),
|
|
||||||
new Permission('discussion.reply'),
|
|
||||||
new Permission('discussion.editPosts'),
|
|
||||||
new Permission('discussion.deletePosts'),
|
|
||||||
new Permission('discussion.rename'),
|
|
||||||
new Permission('discussion.delete')
|
|
||||||
);
|
|
||||||
|
|
||||||
Forum::allow('*', function ($forum, $user, $action) {
|
Forum::allow('*', function ($forum, $user, $action) {
|
||||||
if ($user->hasPermission('forum.'.$action)) {
|
if ($user->hasPermission('forum.'.$action)) {
|
||||||
return true;
|
return true;
|
||||||
@@ -199,7 +189,7 @@ class CoreServiceProvider extends ServiceProvider
|
|||||||
});
|
});
|
||||||
|
|
||||||
Post::allow('*', function ($post, $user, $action) {
|
Post::allow('*', function ($post, $user, $action) {
|
||||||
if ($user->hasPermission('post.'.$action)) {
|
if ($post->discussion->can($user, $action.'Posts')) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -2,15 +2,4 @@
|
|||||||
|
|
||||||
class Permission extends Model
|
class Permission extends Model
|
||||||
{
|
{
|
||||||
protected static $permissions = [];
|
|
||||||
|
|
||||||
public static function getPermissions()
|
|
||||||
{
|
|
||||||
return static::$permissions;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function addPermission($permission)
|
|
||||||
{
|
|
||||||
static::$permissions[] = $permission;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -1,55 +0,0 @@
|
|||||||
<?php namespace Flarum\Extend;
|
|
||||||
|
|
||||||
use Illuminate\Contracts\Container\Container;
|
|
||||||
use Flarum\Core\Models\Permission as PermissionModel;
|
|
||||||
|
|
||||||
class Permission implements ExtenderInterface
|
|
||||||
{
|
|
||||||
protected $permission;
|
|
||||||
|
|
||||||
protected $serialize = false;
|
|
||||||
|
|
||||||
protected $grant = [];
|
|
||||||
|
|
||||||
public function __construct($permission)
|
|
||||||
{
|
|
||||||
$this->permission = $permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function serialize($serialize = true)
|
|
||||||
{
|
|
||||||
$this->serialize = $serialize;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function grant($callback)
|
|
||||||
{
|
|
||||||
$this->grant[] = $callback;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function extend(Container $container)
|
|
||||||
{
|
|
||||||
PermissionModel::addPermission($this->permission);
|
|
||||||
|
|
||||||
list($entity, $permission) = explode('.', $this->permission);
|
|
||||||
|
|
||||||
if ($this->serialize) {
|
|
||||||
$extender = new SerializeAttributes(
|
|
||||||
'Flarum\Api\Serializers\\'.ucfirst($entity).'Serializer',
|
|
||||||
function (&$attributes, $model, $serializer) use ($permission) {
|
|
||||||
$attributes['can'.ucfirst($permission)] = (bool) $model->can($serializer->actor->getUser(), $permission);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$extender->extend($container);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->grant as $callback) {
|
|
||||||
$model = 'Flarum\Core\Models\\'.ucfirst($entity);
|
|
||||||
$model::grantPermission($permission, $callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user