AEM is very flexible for how permissions and "roles" are applied. Your approach will likely depend on how you want to manage users and what features of AEM you deploy. Because of the flexibility, a role based solution can easily get complex. We have decided to keep it fairly simple.
We use groups to define a role based, usually, on job responsibility or department. All of our authoring users are at least "contributors". We define a role like "Marketing" or "Customer Service". A group is created named "Marketing". The Marketing group is a member of Contributors. Marketing employees that need the ability to edit content in AEM are added to the Marketing group. That group in turn is given permission required for marketers to manage content - whatever that may be. In the Marketing case they might have full editing and replicate permissions to all content or even be a member of the built in group "authors". Other roles may be limited to edit and replicate just portions of the content that applies to their job function or role.
We also use LDAP to manage the users and groups so they can be managed centrally using existing user credentials.
Hopefully that is helpful to you or someone else looking.
...
clint