This commit is contained in:
Markos Gogoulos
2026-05-04 19:38:25 +03:00
parent a89bbd141d
commit 5ae021cdda
4 changed files with 15 additions and 18 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -279,13 +279,6 @@ const registerIframeCommand = (editor, iframeButtonText, iframeButtonImage) => {
onAction: handleIframeAction, onAction: handleIframeAction,
}); });
editor.ui.registry.addContextToolbar(iframeButtonName, {
predicate: isIframe,
items: iframeButtonName,
position: 'node',
scope: 'node'
});
editor.ui.registry.addContextMenu(iframeButtonName, { editor.ui.registry.addContextMenu(iframeButtonName, {
update: isIframe, update: isIframe,
}); });
+13 -9
View File
@@ -19,7 +19,7 @@ from django.contrib.auth import login
from django.utils import timezone from django.utils import timezone
from files.models import Category from files.models import Category
from rbac.models import RBACGroup, RBACMembership from rbac.models import RBACGroup, RBACMembership, RBACRole
from users.models import User from users.models import User
from .models import LTIResourceLink, LTIRoleMapping, LTIUserMapping from .models import LTIResourceLink, LTIRoleMapping, LTIUserMapping
@@ -111,16 +111,20 @@ def _ensure_course_context(platform, context_id, title, label, resource_link_id)
return category, rbac_group, resource_link return category, rbac_group, resource_link
_VALID_RBAC_ROLES = {r.value for r in RBACRole}
def _ensure_membership(user, rbac_group, group_role): def _ensure_membership(user, rbac_group, group_role):
""" """
Ensure the user is a member of rbac_group with at least group_role. Ensure the user is a member of rbac_group with group_role.
Upgrades the role if the user already has a lower one; never downgrades. Updates the role if it differs from the current one, in either direction.
""" """
if group_role not in _VALID_RBAC_ROLES:
return
existing = RBACMembership.objects.filter(user=user, rbac_group=rbac_group).first() existing = RBACMembership.objects.filter(user=user, rbac_group=rbac_group).first()
if existing: if existing:
final_role = get_higher_privilege_group(existing.role, group_role) if group_role != existing.role:
if final_role != existing.role: existing.role = group_role
existing.role = final_role
existing.save(update_fields=['role']) existing.save(update_fields=['role'])
else: else:
try: try:
@@ -308,7 +312,7 @@ def apply_lti_roles(user, platform, lti_roles, rbac_group):
if all_mappings[role].get('global_role'): if all_mappings[role].get('global_role'):
global_role = get_higher_privilege_global(global_role, all_mappings[role]['global_role']) global_role = get_higher_privilege_global(global_role, all_mappings[role]['global_role'])
if all_mappings[role].get('group_role'): if all_mappings[role].get('group_role'):
group_role = get_higher_privilege_group(group_role, all_mappings[role]['group_role']) group_role = resolve_group_role(group_role, all_mappings[role]['group_role'])
user.set_role_from_mapping(global_role) user.set_role_from_mapping(global_role)
_ensure_membership(user, rbac_group, group_role) _ensure_membership(user, rbac_group, group_role)
@@ -325,8 +329,8 @@ def get_higher_privilege_global(role1, role2):
return role2 return role2
def get_higher_privilege_group(role1, role2): def resolve_group_role(role1, role2):
"""Return the higher privilege group role.""" """Return whichever of role1/role2 has higher privilege."""
privilege_order = ['member', 'contributor', 'manager'] privilege_order = ['member', 'contributor', 'manager']
try: try:
return privilege_order[max(privilege_order.index(role1), privilege_order.index(role2))] return privilege_order[max(privilege_order.index(role1), privilege_order.index(role2))]