135 Q_UNUSED(application)
137 const auto attributes = args.value(QLatin1String(
"attributes")).value<
ParamsMultiMap>();
138 d->actionReverse = args.value(QLatin1String(
"reverse")).toString();
140 if (!attributes.contains(QLatin1String(
"RequiresRole")) &&
141 !attributes.contains(QLatin1String(
"AllowedRole"))) {
142 qFatal(
"RoleACL: Action %s requires at least one RequiresRole or AllowedRole attribute",
143 qPrintable(d->actionReverse));
145 const QStringList required = attributes.values(QLatin1String(
"RequiresRole"));
146 for (
const QString &role : required) {
147 d->requiresRole.append(role);
150 const QStringList allowed = attributes.values(QLatin1String(
"AllowedRole"));
151 for (
const QString &role : allowed) {
152 d->allowedRole.append(role);
156 auto it = attributes.constFind(QLatin1String(
"ACLDetachTo"));
157 if (it == attributes.constEnd() || it.value().isEmpty()) {
158 qFatal(
"RoleACL: Action %s requires the ACLDetachTo(<action>) attribute",
159 qPrintable(d->actionReverse));
161 d->aclDetachTo = it.value();
183 const QStringList user_has =
186 const QStringList required = d->requiresRole;
187 const QStringList allowed = d->allowedRole;
189 if (!required.isEmpty() && !allowed.isEmpty()) {
190 for (
const QString &role : required) {
191 if (!user_has.contains(role)) {
196 for (
const QString &role : allowed) {
197 if (user_has.contains(role)) {
201 }
else if (!required.isEmpty()) {
202 for (
const QString &role : required) {
203 if (!user_has.contains(role)) {
208 }
else if (!allowed.isEmpty()) {
209 for (
const QString &role : allowed) {
210 if (user_has.contains(role)) {
void detach(Action *action=nullptr)