<div dir="ltr">After our chat I realized I was confusing things. I think the initial design proposed by Bill is good, but we should keep composite roles. Roles should rename roles and we should introduce role namespaces to replace the current realm/client role split. So we should have:<div><br></div><div>* Role</div><div>* Composite role - these are powerful as they permit multiple inheritance (and we also deal with cyclic inheritance). I believe these works well and we&#39;ve not had any negative feedback on them AFAIK</div><div>* Role namespaces - ability to create a hierarchy of roles (a role namespace should just be a namespace, and not some sort of all inclusive role)</div><div>* Group</div><div>  - Simple hierarchy (no multi inheritance)</div><div>  - A group has one or more attributes<br></div><div>  - A group has one or more role mappings</div><div><div>  - A user belongs to one or more groups</div></div><div>     - A user inherits all role mappings of the group</div><div>     - A user inherits all attributes of the group (we need to define how duplicates are resolved)</div><div><br></div><div>I think this will provide the required tools to model most things. Obviously it doesn&#39;t model permissions, but that&#39;s not the agenda. Permissions are for Pedro&#39;s work, which will hopefully be brought into master sometime next year.</div><div><br></div><div>With regards to how this is all added to tokens and managed in adapters we need to be able to:</div><div><br></div><div>* Include/exclude groups in the token</div><div>* Include/exclude roles in the token</div><div>   - Including ability to specify namespaces to include</div><div>* For JEE adapters it should be possible to configure how roles from the token are mapped onto roles in the app</div><div>   - Full namespace</div><div>   - Include single namespace and only include role name, not full namespace</div><div>   - More (groups -&gt; roles?)? Custom?</div><div><br></div><div>Another related topic is fine-grained permissions in the admin console/endpoints. We should leave it as is for now (course grained), with the exception of utilizing role namespaces (instead of having to have &quot;mock&quot; clients). In the future we should be able to leverage Pedro&#39;s work to provide proper fine-grained permissions to the admin console/endpoints.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 4 November 2015 at 18:24, Stan Silvert <span dir="ltr">&lt;<a href="mailto:ssilvert@redhat.com" target="_blank">ssilvert@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 11/4/2015 11:51 AM, Bill Burke wrote:<br>
&gt;<br>
&gt; On 11/4/2015 11:21 AM, Stan Silvert wrote:<br>
&gt;&gt; On 11/4/2015 10:37 AM, Bill Burke wrote:<br>
&gt;&gt;&gt; On 11/4/2015 10:26 AM, Stan Silvert wrote:<br>
&gt;&gt;&gt;&gt; On 11/4/2015 9:15 AM, Bill Burke wrote:<br>
&gt;&gt;&gt;&gt;&gt; I&#39;ve alread stated the reason for composite roles:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Say you have a set of applications under the Sales and Marketing<br>
&gt;&gt;&gt;&gt;&gt; Department:  A Leads Application, Eloqua, and Salesforce.  Each of the<br>
&gt;&gt;&gt;&gt;&gt; applications has a set of roles that are used to manage access to<br>
&gt;&gt;&gt;&gt;&gt; various features of each application.  For example, each app might have<br>
&gt;&gt;&gt;&gt;&gt; an &quot;admin&quot; role.  You would then want to organize permissions into<br>
&gt;&gt;&gt;&gt;&gt; categories and assign coarser grain roles to individual users.  So, you<br>
&gt;&gt;&gt;&gt;&gt; would create a &quot;Sales Admin&quot; composite role that contains the &quot;admin&quot;<br>
&gt;&gt;&gt;&gt;&gt; role of each sales application.  Composite roles allow you to group<br>
&gt;&gt;&gt;&gt;&gt; together roles into role catagories that you can assign to a specific<br>
&gt;&gt;&gt;&gt;&gt; user or user group.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; User Groups are different as you want to assign a set of permissions to<br>
&gt;&gt;&gt;&gt;&gt; a group of users.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; So composite roles are used to group together roles of a set of<br>
&gt;&gt;&gt;&gt;&gt; applications.  User Groups are used to grant a set of perissions to a<br>
&gt;&gt;&gt;&gt;&gt; set of users.<br>
&gt;&gt;&gt;&gt; Maybe it&#39;s just me, but I think of user groups as just a way to group<br>
&gt;&gt;&gt;&gt; users, and roles as a way to group permissions.  Roles are assigned to<br>
&gt;&gt;&gt;&gt; user groups.  Permissions are assigned to roles.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt; We dont&#39; have the concept of a permission, so, assigning roles to a<br>
&gt;&gt;&gt; composite role is equivalent right now of assigning permissions to a role.<br>
&gt;&gt; Isn&#39;t that what Pedro is working on right now?<br>
&gt; No.  His is like: user in this group as write access to this document.<br>
&gt; This is just roles and sets of roles.<br>
&gt;<br>
&gt;<br>
</div></div>&quot;write access to this document&quot; is a permission.  Permissions assigned<br>
to roles.  Roles assigned to groups.<br>
<br>
Maybe it&#39;s just semantics, but that&#39;s the kind of think I&#39;m used to<br>
seeing in other systems.<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
keycloak-dev mailing list<br>
<a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
</div></div></blockquote></div><br></div>