You could do something like this (not compilable!, just to get the idea):
PermissionManager* manager = getPermissionManager();
foreach(widget, all-widgets-that-should-depend-on-permissions) {
manager->registerWidget(widget, Permission::Admin | Permission::Manager);
}
// later
void onPermissionChange(Permission::Type permission) {
PermissionManager* manager = getPermissionManager();
manager->setUserPermission(permission)
}
// implementation could be like this
PermissionManager::setUserPermission(Permission::Type permission) {
foreach(widget, widget-list) {
Permissions permissions = getPermissionsForWidget(widget);
widget->setVisible(permissions is valid permission));
}
}
PermissionManager* manager = getPermissionManager();
foreach(widget, all-widgets-that-should-depend-on-permissions) {
manager->registerWidget(widget, Permission::Admin | Permission::Manager);
}
// later
void onPermissionChange(Permission::Type permission) {
PermissionManager* manager = getPermissionManager();
manager->setUserPermission(permission)
}
// implementation could be like this
PermissionManager::setUserPermission(Permission::Type permission) {
foreach(widget, widget-list) {
Permissions permissions = getPermissionsForWidget(widget);
widget->setVisible(permissions is valid permission));
}
}
To copy to clipboard, switch view to plain text mode
You could also install a EventHandler an watch for the visible/enable events and control the permissions there. This would also catch if a widget is made visible directly. Interesting for implementation could be
- QFlags
- QObject::installEventHandler
Bookmarks