Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Repository/AdminPermission.php
<?php

namespace XF\Repository;

use
XF\Mvc\Entity\Finder;
use
XF\Mvc\Entity\Repository;

class
AdminPermission extends Repository
{
   
/**
     * @return Finder
     */
   
public function findPermissionsForList()
    {
        return
$this->finder('XF:AdminPermission')->order(['display_order']);
    }

    public function
getPermissionTitlePairs()
    {
        return
$this->findPermissionsForList()
            ->
fetch()
            ->
pluckNamed('title', 'admin_permission_id');
    }

    public function
rebuildAdminPermissionCache()
    {
       
$db = $this->em->getDb();
       
$permissions = [];
       
$permissionsSql = $db->query('
            SELECT admin_permission_entry.user_id, admin_permission_entry.admin_permission_id
            FROM xf_admin_permission_entry AS admin_permission_entry
            INNER JOIN xf_admin_permission AS admin_permission ON
                (admin_permission.admin_permission_id = admin_permission_entry.admin_permission_id)
        '
);
        while (
$permission = $permissionsSql->fetch())
        {
           
$permissions[$permission['user_id']][$permission['admin_permission_id']] = true;
        }

       
/** @var \XF\Entity\Admin[] $admins */
       
$admins = $this->em->findByIds('XF:Admin', array_keys($permissions));
        foreach (
$admins AS $admin)
        {
           
$admin->permission_cache = $permissions[$admin->user_id];
           
$admin->saveIfChanged();
        }
    }
}