Freezing roles in ERC721NFTProduct and ERC1155NFTProduct is moot
In ERC721NFTProduct and ERC1155NFTProduct roles can be frozen which is supposed to lock role to current addresses and not allow any changes. The problem is that admin can still use AccessControlUpgradable#grantRole and revokeRole to grant and remove roles to addresses because hasRole allows "ADMIN_ROLE" to bypass all role restrictions even "DEFAULT_ADMIN_ROLE".\\n```\\nfunction hasRole(bytes32 role, address account)\\n    public\\n    view\\n    virtual\\n    override\\n    returns (bool)\\n{\\n    return\\n        super.hasRole(ADMIN_ROLE, account) || super.hasRole(role, account);\\n}\\n```\\n\\nIn GranularRoles.sol and AccessControlUpgradable.sol, developers are careful to never grant the "DEFAULT_ADMIN_ROLE" to any user. Additionally they never set the admin role of any role so that it's admin will remain "DEFAULT_ADMIN_ROLE". In theory this should make so that there is no way to grant or revoke roles outside of GranularRoles#_initRoles and updateRoles. The issue is that the override by GranularRoles#hasRole allows "ADMIN_ROLE" to bypass any role restriction including "DEFAULT_ADMIN_ROLE". This allows "ADMIN_ROLE" to directly call AccessControlUpgradable#grantRole and revokeRole, which makes the entire freezing system useless as it doesn't actually stop any role modification.
Override AccessControlUpgradable#grantRole and revokeRole in GranularRoles.sol to revert when called:\\n```\\n GranularRoles.sol\\n\\n+   function grantRole(bytes32 role, address account) public virtual override {\\n+       revert();\\n+   }\\n\\n+   function revokeRole(bytes32 role, address account) public virtual override {\\n+       revert();\\n+   }\\n```\\n
Freezing roles doesn't actually prevent "ADMIN_ROLE" from modifying roles as intended. Submitting as high due to gross over-extension of admin authority clearly violating intended guardrails.
```\\nfunction hasRole(bytes32 role, address account)\\n    public\\n    view\\n    virtual\\n    override\\n    returns (bool)\\n{\\n    return\\n        super.hasRole(ADMIN_ROLE, account) || super.hasRole(role, account);\\n}\\n```\\n