GitHub user gitsult4n added a comment to the discussion: Superset 6.1. Log in 
to Superset using the admin role. In the settings, there are no 
security-related tags, and in the user section, there are no profile 
modifications. How should this be handled?

No feature flag hides the Security menu in 6.x. The defaults are all permissive 
at tag 6.1.0: `SUPERSET_SECURITY_VIEW_MENU = True` (`superset/config.py:93`), 
`FAB_ADD_SECURITY_VIEWS = True` and `FAB_ADD_SECURITY_API = True` 
(`config.py:1630-1631`). The three `FAB_ADD_SECURITY_PERMISSION*` flags are 
False, but they have been since 0.36 and only hide Base Permissions and 
Views/Menus, not List Users or List Roles.

The menu is missing because of permission rows, and there are two ways to get 
there.

First, `superset init` was never run after the upgrade. The web process builds 
AppBuilder with `appbuilder = AppBuilder(update_perms=False)` 
(`superset/extensions/__init__.py:130`), so it never creates permissions. Only 
the CLI does:

```py
# superset/cli/main.py:84
appbuilder.add_permissions(update_perms=True)
security_manager.sync_role_definitions()
```

UPDATING.md for 6.0.0 says this outright for the migrated Roles view, since 
Users, Roles and Groups became React pages in 6.0.0. Fix:

```bash
superset db upgrade
superset init     # webserver stopped
```

Second, and this one survives a correct `superset init`: if your metadata 
database is MySQL or MariaDB, you are hitting a real 6.1.0 bug. The five new 
views declare `class_permission_name = "security"` in lowercase 
(`superset/views/roles.py:28`, same in `users_list.py`, `groups.py`, 
`user_registrations.py`), while the menu category is `"Security"`. 
`ab_view_menu.name` is unique and MySQL's default collation is case 
insensitive, so only the lowercase row gets created. Flask-AppBuilder then 
compares case sensitively, `menu.py:79`:

```py
elif item.name not in allowed_menus:
    continue
```

and `allowed_menus` is filled from the database spelling, `pvm.view_menu.name` 
(`security/manager.py:1578`). `'Security' in {'security'}` is False, so the 
whole category drops out, and with it the Settings section.

Check which one you have:

```sql
SELECT vm.name, p.name, r.name
FROM ab_permission_view_role pvr
JOIN ab_permission_view pv ON pv.id = pvr.permission_view_id
JOIN ab_view_menu vm ON vm.id = pv.view_menu_id
JOIN ab_permission p ON p.id = pv.permission_id
JOIN ab_role r ON r.id = pvr.role_id
WHERE p.name = 'menu_access'
  AND LOWER(vm.name) IN ('security','list users','list roles','list groups');
```

No rows for Admin means case one. Rows with a lowercase `security` means case 
two, and the fix until you can upgrade is:

```sql
UPDATE ab_view_menu SET name = 'Security' WHERE name = 'security';
```

then `superset init` and restart. Upstream this is PR #40527, "fix: correct 
Security menu case for MySQL deployments", merged 2026-07-03 with migration 
`b4a3f2e1d0c9`. I checked today: it is on master only, the `6.1` and `6.2` 
branches still carry the lowercase string, so 6.1.0 has no released fix.

On the profile: Settings, User, Info is rendered for every logged-in user, but 
`/user_info/` requires read on the Admin-only `user` view menu, so anyone who 
is not effectively Admin gets bounced to `/superset/welcome/`. That is open 
issue #43089. A real Admin with synced permissions does get Reset my password 
and Edit user there, so if you do not, the account is not resolving as Admin. 
Worth confirming with `superset fab list-users`.

Everything above was read at tag 6.1.0 with Flask-AppBuilder 5.0.2, the version 
it pins. I did not stand up a 6.1 instance, so the SQL is a diagnosis to run, 
not a reproduction.


GitHub link: 
https://github.com/apache/superset/discussions/43554#discussioncomment-18168390

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: 
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to