Pillar Extensions can now determine which user roles to index in Algola
This commit is contained in:
parent
8d94901bab
commit
8e02de32ab
@ -76,6 +76,7 @@ class PillarServer(Eve):
|
|||||||
'protected',
|
'protected',
|
||||||
'service', 'badger', 'svner', 'urler',
|
'service', 'badger', 'svner', 'urler',
|
||||||
}
|
}
|
||||||
|
self._user_roles_indexable: typing.Set[str] = {'demo', 'admin', 'subscriber'}
|
||||||
|
|
||||||
self.app_root = os.path.abspath(app_root)
|
self.app_root = os.path.abspath(app_root)
|
||||||
self._load_flask_config()
|
self._load_flask_config()
|
||||||
@ -370,8 +371,16 @@ class PillarServer(Eve):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
for extension in self.pillar_extensions.values():
|
for extension in self.pillar_extensions.values():
|
||||||
|
indexed_but_not_defined = extension.user_roles_indexable - extension.user_roles
|
||||||
|
if indexed_but_not_defined:
|
||||||
|
raise ValueError('Extension %s has roles %s indexable but not in user_roles',
|
||||||
|
extension.name, indexed_but_not_defined)
|
||||||
|
|
||||||
self._user_roles.update(extension.user_roles)
|
self._user_roles.update(extension.user_roles)
|
||||||
self.log.info('Loaded %i user roles from extensions', len(self._user_roles))
|
self._user_roles_indexable.update(extension.user_roles_indexable)
|
||||||
|
|
||||||
|
self.log.info('Loaded %i user roles from extensions, %i of which are indexable',
|
||||||
|
len(self._user_roles), len(self._user_roles_indexable))
|
||||||
|
|
||||||
def register_static_file_endpoint(self, url_prefix, endpoint_name, static_folder):
|
def register_static_file_endpoint(self, url_prefix, endpoint_name, static_folder):
|
||||||
from pillar.web.staticfile import PillarStaticFile
|
from pillar.web.staticfile import PillarStaticFile
|
||||||
@ -700,3 +709,7 @@ class PillarServer(Eve):
|
|||||||
@property
|
@property
|
||||||
def user_roles(self) -> typing.FrozenSet[str]:
|
def user_roles(self) -> typing.FrozenSet[str]:
|
||||||
return frozenset(self._user_roles)
|
return frozenset(self._user_roles)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def user_roles_indexable(self) -> typing.FrozenSet[str]:
|
||||||
|
return frozenset(self._user_roles_indexable)
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from bson import ObjectId
|
from bson import ObjectId
|
||||||
from flask import current_app
|
|
||||||
|
|
||||||
|
from pillar import current_app
|
||||||
from pillar.api.file_storage import generate_link
|
from pillar.api.file_storage import generate_link
|
||||||
from . import skip_when_testing
|
from . import skip_when_testing
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
INDEX_ALLOWED_USER_ROLES = {'admin', 'subscriber', 'demo', 'flamenco-user'}
|
|
||||||
INDEX_ALLOWED_NODE_TYPES = {'asset', 'texture', 'group', 'hdri'}
|
INDEX_ALLOWED_NODE_TYPES = {'asset', 'texture', 'group', 'hdri'}
|
||||||
|
|
||||||
|
|
||||||
@ -24,7 +23,7 @@ def algolia_index_user_save(user):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Strip unneeded roles
|
# Strip unneeded roles
|
||||||
index_roles = user_roles.intersection(INDEX_ALLOWED_USER_ROLES)
|
index_roles = user_roles.intersection(current_app.user_roles_indexable)
|
||||||
|
|
||||||
# Create or update Algolia index for the user
|
# Create or update Algolia index for the user
|
||||||
index_users.save_object({
|
index_users.save_object({
|
||||||
|
@ -34,6 +34,7 @@ class PillarExtension(object, metaclass=abc.ABCMeta):
|
|||||||
|
|
||||||
# Set of user roles used/introduced by this extension.
|
# Set of user roles used/introduced by this extension.
|
||||||
user_roles: typing.Set[str] = set()
|
user_roles: typing.Set[str] = set()
|
||||||
|
user_roles_indexable: typing.Set[str] = set()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
|
Loading…
x
Reference in New Issue
Block a user