Skip to content

Commit af08fdc

Browse files
committed
optimización consulta de permisos y grupos
1 parent 12b801d commit af08fdc

File tree

3 files changed

+59
-16
lines changed

3 files changed

+59
-16
lines changed

modules/debugbar/src/Debugbar.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public function __construct($args = null)
101101
$this->messages = $debugbar->getCollector('messages');
102102
$this->request = $debugbar->getCollector('request');
103103
$this->response = $debugbar->getCollector('response');
104-
$this->controller = $debugbar->getCollector('controller');
104+
// $this->controller = $debugbar->getCollector('controller');
105105
$this->exceptions = $debugbar->getCollector('exceptions');
106106
$this->errors = $debugbar->getCollector('errors');
107107

@@ -118,7 +118,7 @@ public function getDebugbar()
118118
// self::$debugbar->addCollector(new PhpInfoCollector());
119119
// self::$debugbar->addCollector(new MessagesCollector());
120120
// self::$debugbar->addCollector(new RequestDataCollector());
121-
self::$debugbar->addCollector(new ControllerCollector());
121+
// self::$debugbar->addCollector(new ControllerCollector());
122122
self::$debugbar->addCollector(new ResponseCollector());
123123
// self::$debugbar->addCollector(new TimeDataCollector());
124124
// self::$debugbar->addCollector(new MemoryCollector());
@@ -261,11 +261,11 @@ public function onPDOCreated(&$pdo)
261261
// TODO: see: (https://github.com/maximebf/php-debugbar/issues/330)
262262
public function onViewCreated(&$twig)
263263
{
264-
if(!$this->getDebugbar()->hasCollector('twig'))
265-
{
266-
$twig = new TraceableTwigEnvironment($twig, $this->time);
267-
$this->getDebugbar()->addCollector(new TwigCollector($twig));
268-
}
264+
// if(!$this->getDebugbar()->hasCollector('twig'))
265+
// {
266+
// $twig = new TraceableTwigEnvironment($twig, $this->time);
267+
// $this->getDebugbar()->addCollector(new TwigCollector($twig));
268+
// }
269269
}
270270

271271
public function onMailTransport($mailer)

modules/group_permissions/src/EventReceiver.php

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616

1717
class EventReceiver
1818
{
19-
19+
/**
20+
* @param \GroupPage[] $cache
21+
*/
22+
private static $cache = [];
23+
private static $groupsUserCache = [];
2024
public function beforeControllerRun($controller)
2125
{
2226
if($controller instanceof AuthController)
@@ -31,7 +35,7 @@ public function isUserAllowed($controller, $user)
3135

3236
/**
3337
* @param $controller
34-
* @param $user User
38+
* @param \User $user
3539
* @return bool
3640
*/
3741
public static function isGroupAllowed($controller, $user)
@@ -40,15 +44,17 @@ public static function isGroupAllowed($controller, $user)
4044
$config = $context->getConfig();
4145
$page = new Page();
4246
$page = $page->get_by_controller($controller)->getModel();
43-
if($page->id > 0)
47+
if($page instanceof Page && $page->id > 0)
4448
{
45-
$group = new \Group();
46-
$groupPages = new \GroupPage();
47-
$groups = $group->getByUser($user);
49+
$groups = self::getGroupsByUser($user);
4850
foreach($groups->getModels() as $group)
4951
{
50-
$result = $groupPages->get(array('id_group' => $group->id, 'id_page' => $page->id));
51-
if($result->count() > 0) return ALLOW_USER;
52+
$result = self::isGroupPages($group->id, $page->id);
53+
if($result) {
54+
return ALLOW_USER;
55+
}
56+
// $result = $groupPages->get(array('id_group' => $group->id, 'id_page' => $page->id));
57+
// if($result->count() > 0) return ALLOW_USER;
5258
}
5359
}
5460
return isset($config['allowDefault'])?(!$config['allowDefault']?DISALLOW_USER:""):null;
@@ -58,4 +64,29 @@ public function getAdminControllers()
5864
{
5965
return 'GLFramework\Modules\GroupPermissions\groups';
6066
}
67+
68+
public static function getGroupsByUser($user) {
69+
$user_id = $user->id;
70+
$group = new \Group();
71+
if(self::$groupsUserCache[$user_id]) {
72+
return self::$groupsUserCache[$user_id];
73+
}
74+
self::$groupsUserCache[$user_id] = $group->getByUser($user);
75+
return self::$groupsUserCache[$user_id];
76+
77+
}
78+
79+
public static function isGroupPages($id_group, $id_page) {
80+
if(!self::$cache) {
81+
$groupPages = new \GroupPage();
82+
self::$cache = $groupPages->get_all()->getModels();
83+
}
84+
foreach (self::$cache as $key => $value) {
85+
if($value->id_group == $id_group && $value->id_page == $id_page) {
86+
return true;
87+
}
88+
}
89+
return false;
90+
91+
}
6192
}

src/Model/UserPage.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
use GLFramework\Controller;
3030
use GLFramework\Model;
31+
use GLFramework\ModelResult;
3132

3233
/**
3334
* Class UserPage
@@ -36,6 +37,7 @@
3637
*/
3738
class UserPage extends Model
3839
{
40+
private static $cache;
3941
var $id;
4042
var $id_user;
4143
var $id_page;
@@ -107,7 +109,17 @@ public function isAllowed($instance, $user)
107109
*/
108110
public function getByPageUser($id_user, $id_page)
109111
{
110-
return $this->get(array('id_user' => $id_user, 'id_page' => $id_page));
112+
if(!self::$cache) {
113+
self::$cache = $this->get_all();
114+
}
115+
$list = [];
116+
117+
foreach (self::$cache as $key => $value) {
118+
if($value->id_user == $id_user && $value->id_page == $id_page) {
119+
$list[] = $value;
120+
}
121+
}
122+
return new ModelResult(UserPage::class, $list);
111123
}
112124

113125
/**

0 commit comments

Comments
 (0)