# AccessControlDefaultAdminRulesUpgradeable + AccessControlEnumerableUpgradeable

**URL:** <https://forum.openzeppelin.com/t/accesscontroldefaultadminrulesupgradeable-accesscontrolenumerableupgradeable/45645>\
**Category:** Support\
**Created:** [October 19, 2026, 7:18pm UTC](https://forum.openzeppelin.com/t/accesscontroldefaultadminrulesupgradeable-accesscontrolenumerableupgradeable/45645 "2026-10-19T19:18:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![harsh](https://avatars.discourse-cdn.com/v4/letter/h/57b2e6/32.png) [@harsh](https://forum.openzeppelin.com/u/harsh)\
**Post date:** [October 19, 2026, 7:18pm UTC](https://forum.openzeppelin.com/t/accesscontroldefaultadminrulesupgradeable-accesscontrolenumerableupgradeable/45645/1 "2026-10-19T19:18:29Z")

</div>

Is there a OZ helper contract or recommendation for when I want my smart contract to both support DefaultAdminRules and Enumerable? Currently because both contracts are built off of the base AccessControlUpgradeable, both define functions such as `grantRole`, `revokeRole`, and `supportsInterface`.

I would need to write some glue code that properly routes functions in order to have something like this:

`contract MyContract is AccessControlDefaultAdminRulesUpgradeable, AccessControlEnumerableUpgradeable, UUPSUpgradeable`

Is there any helper library that gives me access to functions like `getRoleMember` / `getRoleMemberCount` without writing code that routes duplicate functions?

Currently the only option I see is to do something like this:

```auto
    function _grantRole(bytes32 role, address account)
        internal
        override(AccessControlDefaultAdminRulesUpgradeable, AccessControlEnumerableUpgradeable)
        returns (bool)
    {
        return super._grantRole(role, account);
    }

    // --- glue: DefaultAdminRules and the base both define these four ---

    function grantRole(bytes32 role, address account)
        public
        override(AccessControlUpgradeable, AccessControlDefaultAdminRulesUpgradeable, IAccessControl)
    {
        super.grantRole(role, account);
    }

```

```

across my contracts.

---

<div class="post-metadata">

**Author:** ![oddmeadow346](https://avatars.discourse-cdn.com/v4/letter/o/9fc29f/32.png) [@oddmeadow346](https://forum.openzeppelin.com/u/oddmeadow346)\
**Post date:** [November 6, 2026, 7:46am UTC](https://forum.openzeppelin.com/t/accesscontroldefaultadminrulesupgradeable-accesscontrolenumerableupgradeable/45645/2 "2026-11-06T07:46:32Z")

</div>

This post was flagged by the community and is temporarily hidden.
