Advanced Access Manager - Version 5.3.3

Version Description

  • Fixed couple bugs with secure login widget rendering
  • Fixed the bug with AAM UI refresh triggered by aam extensions
  • Fixed the bug with send remote request and array of cookies
  • Added ability to hide login navigations links in the secure login widget with feature.secureLogin.ui.showNav configPress option
  • Added new custom capability "manage_same_user_level"
Download this release

Release Info

Developer vasyl_m
Plugin Icon 128x128 Advanced Access Manager
Version 5.3.3
Comparing to
See all releases

Code changes from version 5.3.2 to 5.3.3

Application/Backend/Filter.php CHANGED
@@ -311,6 +311,8 @@ class AAM_Backend_Filter {
311
  $roleLevel = AAM_Core_API::maxLevel($role['capabilities']);
312
  if ($userLevel < $roleLevel) {
313
  unset($roles[$id]);
 
 
314
  }
315
  }
316
  }
@@ -318,6 +320,20 @@ class AAM_Backend_Filter {
318
  return $roles;
319
  }
320
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
  /**
322
  * Filter user query
323
  *
@@ -336,7 +352,10 @@ class AAM_Backend_Filter {
336
  $roles = AAM_Core_API::getRoles();
337
 
338
  foreach($roles->role_objects as $id => $role) {
339
- if (AAM_Core_API::maxLevel($role->capabilities) > $max) {
 
 
 
340
  $exclude[] = $id;
341
  }
342
  }
@@ -358,9 +377,13 @@ class AAM_Backend_Filter {
358
  $roles = AAM_Core_API::getRoles();
359
 
360
  foreach($roles->role_objects as $id => $role) {
361
- if (isset($views[$id])
362
- && AAM_Core_API::maxLevel($role->capabilities) > $max) {
363
- unset($views[$id]);
 
 
 
 
364
  }
365
  }
366
 
311
  $roleLevel = AAM_Core_API::maxLevel($role['capabilities']);
312
  if ($userLevel < $roleLevel) {
313
  unset($roles[$id]);
314
+ } elseif ($userLevel == $roleLevel && $this->filterSameLevel()) {
315
+ unset($roles[$id]);
316
  }
317
  }
318
  }
320
  return $roles;
321
  }
322
 
323
+ /**
324
+ *
325
+ * @return type
326
+ */
327
+ protected function filterSameLevel() {
328
+ $response = false;
329
+
330
+ if (AAM_Core_API::capabilityExists('manage_same_user_level')) {
331
+ $response = !AAM::getUser()->hasCapability('manage_same_user_level');
332
+ }
333
+
334
+ return $response;
335
+ }
336
+
337
  /**
338
  * Filter user query
339
  *
352
  $roles = AAM_Core_API::getRoles();
353
 
354
  foreach($roles->role_objects as $id => $role) {
355
+ $roleMax = AAM_Core_API::maxLevel($role->capabilities);
356
+ if ($roleMax > $max ) {
357
+ $exclude[] = $id;
358
+ } elseif ($roleMax == $max && $this->filterSameLevel()) {
359
  $exclude[] = $id;
360
  }
361
  }
377
  $roles = AAM_Core_API::getRoles();
378
 
379
  foreach($roles->role_objects as $id => $role) {
380
+ $roleMax = AAM_Core_API::maxLevel($role->capabilities);
381
+ if (isset($views[$id])) {
382
+ if ($roleMax > $max) {
383
+ unset($views[$id]);
384
+ } elseif ($roleMax == $max && $this->filterSameLevel()) {
385
+ unset($views[$id]);
386
+ }
387
  }
388
  }
389
 
Application/Backend/Manager.php CHANGED
@@ -23,7 +23,7 @@ class AAM_Backend_Manager {
23
  * @access private
24
  */
25
  private static $_instance = null;
26
-
27
  /**
28
  * Initialize the object
29
  *
@@ -130,14 +130,14 @@ class AAM_Backend_Manager {
130
  $htpasswd = AAM_Core_Config::get('htpasswd');
131
  if (!empty($htpasswd)) {
132
  AAM_Core_Console::add(
133
- 'On ConfigPress tab, change [htpasswd] option to [feature.metabox.htpasswd]', 'b', 'b'
134
  );
135
  }
136
 
137
  $export = AAM_Core_Config::get('export', null);
138
  if (!empty($export)) {
139
  AAM_Core_Console::add(
140
- 'On ConfigPress tab, change [export] option to [feature.export]', 'b', 'b'
141
  );
142
  }
143
 
@@ -151,14 +151,21 @@ class AAM_Backend_Manager {
151
  $dir = AAM_Core_Config::get('extention.directory', null);
152
  if (!empty($dir)) {
153
  AAM_Core_Console::add(
154
- 'On ConfigPress tab, change [extention.directory] option to [core.extention.directory]', 'b', 'b'
155
  );
156
  }
157
 
158
- $tmpl = AAM_Core_Config::get('login.shortcode.template', null);
159
  if (!empty($tmpl)) {
160
  AAM_Core_Console::add(
161
- 'On ConfigPress tab, change [login.shortcode.template] option to [feature.secureLogin.shortcode.template]', 'b', 'b'
 
 
 
 
 
 
 
162
  );
163
  }
164
  }
@@ -723,7 +730,7 @@ class AAM_Backend_Manager {
723
  /**
724
  * Bootstrap the manager
725
  *
726
- * @return void
727
  *
728
  * @access public
729
  */
@@ -731,6 +738,8 @@ class AAM_Backend_Manager {
731
  if (is_null(self::$_instance)) {
732
  self::$_instance = new self;
733
  }
 
 
734
  }
735
 
736
  /**
@@ -741,9 +750,7 @@ class AAM_Backend_Manager {
741
  * @access public
742
  */
743
  public static function getInstance() {
744
- self::bootstrap();
745
-
746
- return self::$_instance;
747
  }
748
 
749
  }
23
  * @access private
24
  */
25
  private static $_instance = null;
26
+
27
  /**
28
  * Initialize the object
29
  *
130
  $htpasswd = AAM_Core_Config::get('htpasswd');
131
  if (!empty($htpasswd)) {
132
  AAM_Core_Console::add(
133
+ 'On ConfigPress tab, change all options that start with [htpasswd...] to [feature.metabox.htpasswd...]', 'b', 'b'
134
  );
135
  }
136
 
137
  $export = AAM_Core_Config::get('export', null);
138
  if (!empty($export)) {
139
  AAM_Core_Console::add(
140
+ 'On ConfigPress tab, change all options that start with [export...] to [feature.export...]', 'b', 'b'
141
  );
142
  }
143
 
151
  $dir = AAM_Core_Config::get('extention.directory', null);
152
  if (!empty($dir)) {
153
  AAM_Core_Console::add(
154
+ 'On ConfigPress tab, change all options that start with [extention...] to [core.extention...]', 'b', 'b'
155
  );
156
  }
157
 
158
+ $tmpl = AAM_Core_Config::get('login.shortcode', null);
159
  if (!empty($tmpl)) {
160
  AAM_Core_Console::add(
161
+ 'On ConfigPress tab, change all options that start with [login.shortcode....] option to [feature.secureLogin.shortcode...]', 'b', 'b'
162
+ );
163
+ }
164
+
165
+ $login = AAM_Core_Config::get('login.widget', null);
166
+ if (!empty($login)) {
167
+ AAM_Core_Console::add(
168
+ 'On ConfigPress tab, change all options that start with [login.widget...] to [feature.secureLogin.widget...]', 'b', 'b'
169
  );
170
  }
171
  }
730
  /**
731
  * Bootstrap the manager
732
  *
733
+ * @return AAM_Backend_View
734
  *
735
  * @access public
736
  */
738
  if (is_null(self::$_instance)) {
739
  self::$_instance = new self;
740
  }
741
+
742
+ return self::$_instance;
743
  }
744
 
745
  /**
750
  * @access public
751
  */
752
  public static function getInstance() {
753
+ return self::bootstrap();
 
 
754
  }
755
 
756
  }
Application/Backend/Widget/Login.php CHANGED
@@ -32,7 +32,7 @@ class AAM_Backend_Widget_Login extends WP_Widget {
32
 
33
  require(
34
  AAM_Core_Config::get(
35
- 'login.widget.template',
36
  realpath(dirname(__FILE__) . '/../phtml/widget/login-frontend.phtml')
37
  )
38
  );
32
 
33
  require(
34
  AAM_Core_Config::get(
35
+ 'feature.secureLogin.widget.template',
36
  realpath(dirname(__FILE__) . '/../phtml/widget/login-frontend.phtml')
37
  )
38
  );
Application/Backend/phtml/widget/login-frontend.phtml CHANGED
@@ -33,26 +33,28 @@
33
 
34
  <p class="forgetmenot">
35
  <label for="rememberme">
36
- <input id="<?php echo $this->get_field_id('rememberme'); ?>" value="forever" type="checkbox"/> <?php __('Remember Me', AAM_KEY); ?>
37
  </label>
38
  </p>
39
 
40
  <p class="submit">
41
- <input class="button button-primary button-large aam-login-submit" data-prefix="<?php echo $this->get_field_id(''); ?>" value="<?php __('Log In', AAM_KEY); ?>" type="submit" />
42
  <input id="<?php echo $this->get_field_id('redirect'); ?>" value="<?php echo $this->args['redirect']; ?>" type="hidden" />
43
  </p>
44
  </div>
45
 
46
- <p id="<?php echo $this->get_field_id('nav'); ?>">
47
- <?php
48
- if ( get_option( 'users_can_register' ) ) {
49
- $registration_url = sprintf('<a href="%s">%s</a>', esc_url(wp_registration_url()), __('Register'));
50
- echo apply_filters( 'register', $registration_url );
51
- echo esc_html(apply_filters('login_link_separator', ' | '));
52
- }
53
- ?>
54
- <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php echo __('Lost your password?', AAM_KEY); ?></a>
55
- </p>
 
 
56
  <?php } else { ?>
57
  <div style="display: table; width: 100%;">
58
  <div style="display:table-cell; width: 30%; text-align: center; vertical-align: middle;">
33
 
34
  <p class="forgetmenot">
35
  <label for="rememberme">
36
+ <input id="<?php echo $this->get_field_id('rememberme'); ?>" value="forever" type="checkbox"/> <?php echo __('Remember Me', AAM_KEY); ?>
37
  </label>
38
  </p>
39
 
40
  <p class="submit">
41
+ <input class="button button-primary button-large aam-login-submit" data-prefix="<?php echo $this->get_field_id(''); ?>" value="<?php echo __('Log In', AAM_KEY); ?>" type="submit" />
42
  <input id="<?php echo $this->get_field_id('redirect'); ?>" value="<?php echo $this->args['redirect']; ?>" type="hidden" />
43
  </p>
44
  </div>
45
 
46
+ <?php if (AAM::api()->getConfig('feature.secureLogin.ui.showNav', true)) { ?>
47
+ <p id="<?php echo $this->get_field_id('nav'); ?>">
48
+ <?php
49
+ if ( get_option( 'users_can_register' ) ) {
50
+ $registration_url = sprintf('<a href="%s">%s</a>', esc_url(wp_registration_url()), __('Register'));
51
+ echo apply_filters( 'register', $registration_url );
52
+ echo esc_html(apply_filters('login_link_separator', ' | '));
53
+ }
54
+ ?>
55
+ <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php echo __('Lost your password?', AAM_KEY); ?></a>
56
+ </p>
57
+ <?php } ?>
58
  <?php } else { ?>
59
  <div style="display: table; width: 100%;">
60
  <div style="display:table-cell; width: 30%; text-align: center; vertical-align: middle;">
Application/Core/API.php CHANGED
@@ -10,6 +10,8 @@
10
  /**
11
  * AAM core API
12
  *
 
 
13
  * @package AAM
14
  * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
  */
@@ -139,7 +141,7 @@ final class AAM_Core_API {
139
  if (is_array($cookies) && $send_cookies) {
140
  foreach ($cookies as $key => $value) {
141
  //SKIP PHPSESSID - some servers don't like it for security reason
142
- if ($key !== session_name()) {
143
  $requestCookies[] = new WP_Http_Cookie(array(
144
  'name' => $key, 'value' => $value
145
  ));
@@ -408,18 +410,24 @@ final class AAM_Core_API {
408
  $res = $wp_query->queried_object;
409
  } elseif (!empty($wp_query->post)) {
410
  $res = $wp_query->post;
411
- } elseif (!empty($wp_query->query['name']) && !empty($wp_query->posts)) {
412
- //Important! Cover the scenario of NOT LIST but ALLOW READ
413
- foreach($wp_query->posts as $post) {
414
- if ($post->post_name == $wp_query->query['name']) {
415
- $res = $post;
416
- break;
417
- }
418
- }
419
  } elseif (!empty($wp_query->query_vars['p'])) {
420
  $res = get_post($wp_query->query_vars['p']);
421
  } elseif (!empty($wp_query->query_vars['page_id'])) {
422
  $res = get_post($wp_query->query_vars['page_id']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
  }
424
 
425
  $user = AAM::getUser();
10
  /**
11
  * AAM core API
12
  *
13
+ * NOTE! THIS IS LEGACY CLASS THAT SLOWLY WILL DIE! DO NOT RELY ON ITS METHODS
14
+ *
15
  * @package AAM
16
  * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17
  */
141
  if (is_array($cookies) && $send_cookies) {
142
  foreach ($cookies as $key => $value) {
143
  //SKIP PHPSESSID - some servers don't like it for security reason
144
+ if ($key !== session_name() && is_scalar($value)) {
145
  $requestCookies[] = new WP_Http_Cookie(array(
146
  'name' => $key, 'value' => $value
147
  ));
410
  $res = $wp_query->queried_object;
411
  } elseif (!empty($wp_query->post)) {
412
  $res = $wp_query->post;
 
 
 
 
 
 
 
 
413
  } elseif (!empty($wp_query->query_vars['p'])) {
414
  $res = get_post($wp_query->query_vars['p']);
415
  } elseif (!empty($wp_query->query_vars['page_id'])) {
416
  $res = get_post($wp_query->query_vars['page_id']);
417
+ } elseif (!empty($wp_query->query['name'])) {
418
+ //Important! Cover the scenario of NOT LIST but ALLOW READ
419
+ if (!empty($wp_query->posts)) {
420
+ foreach($wp_query->posts as $post) {
421
+ if ($post->post_name == $wp_query->query['name']) {
422
+ $res = $post;
423
+ break;
424
+ }
425
+ }
426
+ } elseif (!empty($wp_query->query['post_type'])) {
427
+ $res = get_page_by_path(
428
+ $wp_query->query['name'], OBJECT, $wp_query->query['post_type']
429
+ );
430
+ }
431
  }
432
 
433
  $user = AAM::getUser();
Application/Core/Config.php CHANGED
@@ -81,11 +81,7 @@ class AAM_Core_Config {
81
  * @static
82
  */
83
  protected static function normalize($setting) {
84
- return str_replace(
85
- array('{ABSPATH}'),
86
- array(ABSPATH),
87
- $setting
88
- );
89
  }
90
 
91
  /**
81
  * @static
82
  */
83
  protected static function normalize($setting) {
84
+ return str_replace(array('{ABSPATH}'), array(ABSPATH), $setting);
 
 
 
 
85
  }
86
 
87
  /**
Application/Extension/List.php CHANGED
@@ -22,7 +22,7 @@ class AAM_Extension_List {
22
  'description' => 'Get the complete list of all available premium extensions in one package. Any new premium extensions in the future will be available for no additional cost.',
23
  'url' => 'https://aamplugin.com/complete-package',
24
  'version' => (defined('AAM_COMPLETE_PACKAGE') ? constant('AAM_COMPLETE_PACKAGE') : null),
25
- 'latest' => '3.7.3' // TODO - Increase version after Plus Package feedback loop
26
  ),
27
  'AAM_PLUS_PACKAGE' => array(
28
  'title' => 'Plus Package',
@@ -31,7 +31,7 @@ class AAM_Extension_List {
31
  'description' => 'The best selling extension with the most advanced content management features for the WordPress CMS. Manage granular access to any post, page, custom post type, category, custom hierarchical taxonomy or define the default access to all your content for all users, roles and visitors.',
32
  'url' => 'https://aamplugin.com/extension/plus-package',
33
  'version' => (defined('AAM_PLUS_PACKAGE') ? constant('AAM_PLUS_PACKAGE') : null),
34
- 'latest' => '3.7'
35
  ),
36
  'AAM_IP_CHECK' => array(
37
  'title' => 'IP Check',
@@ -78,7 +78,7 @@ class AAM_Extension_List {
78
  'license' => 'AAMMULTISITE',
79
  'description' => 'Convenient way to navigate between different sites in the Network Admin Panel. This is the open source solution and you can find it on the <a href="https://github.com/aamplugin/multisite-extension" target="_blank">Github here</a>.',
80
  'version' => (defined('AAM_MULTISITE') ? constant('AAM_MULTISITE') : null),
81
- 'latest' => '2.5.3'
82
  ),
83
  'AAM_USER_ACTIVITY' => array(
84
  'title' => 'User Activities',
@@ -97,7 +97,7 @@ class AAM_Extension_List {
97
  'license' => 'AAMSOCIALLOGIN',
98
  'description' => 'Login to your website with social networks like Facebook, Twitter, Instagram etc. <a href="https://aamplugin.com/help/how-does-aam-social-login-works" target="_blank">Read more.</a> This is the open source solution and you can find it on the <a href="https://github.com/aamplugin/social-login-extension" target="_blank">Github here</a>.',
99
  'version' => (defined('AAM_SOCIAL_LOGIN') ? constant('AAM_SOCIAL_LOGIN') : null),
100
- 'latest' => '0.1'
101
  ),
102
  );
103
  }
22
  'description' => 'Get the complete list of all available premium extensions in one package. Any new premium extensions in the future will be available for no additional cost.',
23
  'url' => 'https://aamplugin.com/complete-package',
24
  'version' => (defined('AAM_COMPLETE_PACKAGE') ? constant('AAM_COMPLETE_PACKAGE') : null),
25
+ 'latest' => '3.7.5'
26
  ),
27
  'AAM_PLUS_PACKAGE' => array(
28
  'title' => 'Plus Package',
31
  'description' => 'The best selling extension with the most advanced content management features for the WordPress CMS. Manage granular access to any post, page, custom post type, category, custom hierarchical taxonomy or define the default access to all your content for all users, roles and visitors.',
32
  'url' => 'https://aamplugin.com/extension/plus-package',
33
  'version' => (defined('AAM_PLUS_PACKAGE') ? constant('AAM_PLUS_PACKAGE') : null),
34
+ 'latest' => '3.7.2'
35
  ),
36
  'AAM_IP_CHECK' => array(
37
  'title' => 'IP Check',
78
  'license' => 'AAMMULTISITE',
79
  'description' => 'Convenient way to navigate between different sites in the Network Admin Panel. This is the open source solution and you can find it on the <a href="https://github.com/aamplugin/multisite-extension" target="_blank">Github here</a>.',
80
  'version' => (defined('AAM_MULTISITE') ? constant('AAM_MULTISITE') : null),
81
+ 'latest' => '2.5.4'
82
  ),
83
  'AAM_USER_ACTIVITY' => array(
84
  'title' => 'User Activities',
97
  'license' => 'AAMSOCIALLOGIN',
98
  'description' => 'Login to your website with social networks like Facebook, Twitter, Instagram etc. <a href="https://aamplugin.com/help/how-does-aam-social-login-works" target="_blank">Read more.</a> This is the open source solution and you can find it on the <a href="https://github.com/aamplugin/social-login-extension" target="_blank">Github here</a>.',
99
  'version' => (defined('AAM_SOCIAL_LOGIN') ? constant('AAM_SOCIAL_LOGIN') : null),
100
+ 'latest' => '0.2.1'
101
  ),
102
  );
103
  }
Application/Extension/Repository.php CHANGED
@@ -123,7 +123,7 @@ class AAM_Extension_Repository {
123
  if (file_exists($config)) {
124
  $conf = require $config;
125
  $load = empty($cache[$conf['id']]['status']) || ($cache[$conf['id']]['status'] != self::STATUS_INACTIVE);
126
- } else { // TODO - Remove May 2018
127
  AAM_Core_Console::add(AAM_Backend_View_Helper::preparePhrase(
128
  sprintf(
129
  __('The [%s] file is missing. Update extension to the latest version. %sRead more.%s', AAM_KEY),
123
  if (file_exists($config)) {
124
  $conf = require $config;
125
  $load = empty($cache[$conf['id']]['status']) || ($cache[$conf['id']]['status'] != self::STATUS_INACTIVE);
126
+ } else { // TODO - Remove May 2019
127
  AAM_Core_Console::add(AAM_Backend_View_Helper::preparePhrase(
128
  sprintf(
129
  __('The [%s] file is missing. Update extension to the latest version. %sRead more.%s', AAM_KEY),
Application/Frontend/phtml/login.phtml CHANGED
@@ -29,16 +29,18 @@
29
  </p>
30
  </div>
31
 
32
- <p id="<?php echo $this->args['id'] . '-nav'; ?>">
33
- <?php
34
- if (get_option('users_can_register')) {
35
- $registration_url = sprintf('<a href="%s">%s</a>', esc_url(wp_registration_url()), __('Register'));
36
- echo apply_filters( 'register', $registration_url );
37
- echo esc_html(apply_filters('login_link_separator', ' | '));
38
- }
39
- ?>
40
- <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php echo __('Lost your password?', AAM_KEY); ?></a>
41
- </p>
 
 
42
  <?php } else { ?>
43
  <div style="text-align: center;">
44
  <div style="padding: 30px;">
29
  </p>
30
  </div>
31
 
32
+ <?php if (AAM::api()->getConfig('feature.secureLogin.ui.showNav', true)) { ?>
33
+ <p id="<?php echo $this->args['id'] . '-nav'; ?>">
34
+ <?php
35
+ if (get_option('users_can_register')) {
36
+ $registration_url = sprintf('<a href="%s">%s</a>', esc_url(wp_registration_url()), __('Register'));
37
+ echo apply_filters( 'register', $registration_url );
38
+ echo esc_html(apply_filters('login_link_separator', ' | '));
39
+ }
40
+ ?>
41
+ <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php echo __('Lost your password?', AAM_KEY); ?></a>
42
+ </p>
43
+ <?php } ?>
44
  <?php } else { ?>
45
  <div style="text-align: center;">
46
  <div style="padding: 30px;">
aam.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: All you need to manage access to your WordPress website
6
- Version: 5.3.2
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://vasyltech.com
9
 
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: All you need to manage access to your WordPress website
6
+ Version: 5.3.3
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://vasyltech.com
9
 
media/js/aam.js CHANGED
@@ -468,6 +468,7 @@
468
  //in case interface needed to be reloaded
469
  aam.addHook('refresh', function () {
470
  $('#role-list').DataTable().ajax.url(aamLocal.ajaxurl).load();
 
471
  });
472
 
473
  })(jQuery);
468
  //in case interface needed to be reloaded
469
  aam.addHook('refresh', function () {
470
  $('#role-list').DataTable().ajax.url(aamLocal.ajaxurl).load();
471
+ aam.fetchContent('main');
472
  });
473
 
474
  })(jQuery);
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: vasyltech
3
  Tags: access, role, user, capability, page access, post access, content access, comments, security, login redirect, membership, backend lockdown, wp-admin, 404, rest api, xml rpc
4
  Requires at least: 4.0
5
  Tested up to: 4.9.6
6
- Stable tag: 5.3.2
7
 
8
  The most powerful access management plugin for WordPress websites.
9
 
@@ -66,6 +66,13 @@ https://www.youtube.com/watch?v=yiOhjaacNJc
66
 
67
  == Changelog ==
68
 
 
 
 
 
 
 
 
69
  = 5.3.2 =
70
  * Fixed the bug that triggers PHP warnings when blocked user is trying to login
71
  * Fixed the bug with get current post method in the core API
3
  Tags: access, role, user, capability, page access, post access, content access, comments, security, login redirect, membership, backend lockdown, wp-admin, 404, rest api, xml rpc
4
  Requires at least: 4.0
5
  Tested up to: 4.9.6
6
+ Stable tag: 5.3.3
7
 
8
  The most powerful access management plugin for WordPress websites.
9
 
66
 
67
  == Changelog ==
68
 
69
+ = 5.3.3 =
70
+ * Fixed couple bugs with secure login widget rendering
71
+ * Fixed the bug with AAM UI refresh triggered by aam extensions
72
+ * Fixed the bug with send remote request and array of cookies
73
+ * Added ability to hide login navigations links in the secure login widget with feature.secureLogin.ui.showNav configPress option
74
+ * Added new custom capability "manage_same_user_level"
75
+
76
  = 5.3.2 =
77
  * Fixed the bug that triggers PHP warnings when blocked user is trying to login
78
  * Fixed the bug with get current post method in the core API