ropensci / datapack

An R package to handle data packages
https://docs.ropensci.org/datapack
44 stars 9 forks source link

Group sysmeta access rules by subject #53

Closed gothub closed 8 years ago

gothub commented 8 years ago

datapack:serializeSystemMetadata() should group access rules by subject, so that a more condensed, and easier to read (by a human) accessPolicy is created. For example, the following access policy has repeated blocks for the same subjects, from https://arcticdata.io/metacat/d1/mn/v2/meta/arctic-data.3958.1:

<accessPolicy>
<allow>
<subject>CN=arctic-data-admins,DC=dataone,DC=org</subject>
<permission>read</permission>
</allow>
<allow>
<subject>CN=arctic-data-admins,DC=dataone,DC=org</subject>
<permission>write</permission>
</allow>
<allow>
<subject>CN=arctic-data-admins,DC=dataone,DC=org</subject>
<permission>changePermission</permission>
</allow>
<allow>
<subject>http://orcid.org/0000-0002-2625-6747</subject>
<permission>read</permission>
</allow>
<allow>
<subject>http://orcid.org/0000-0002-2625-6747</subject>
<permission>write</permission>
</allow>
<allow>
<subject>http://orcid.org/0000-0002-2625-6747</subject>
<permission>changePermission</permission>
</allow>
<allow>
<subject>public</subject>
<permission>read</permission>
</allow>
</accessPolicy>
gothub commented 8 years ago

Updated serializeSystemMetadata in commit 0b319da7bf7dae79e3eb072db9ea1a5de3eff720. The accessPolicy is now grouped by subject, as shown in this example (different ap from above example):

  <allow>
   <subject>public</subject>
   <permission>read</permission>
  </allow>
  <allow>
   <subject>CN=Matt Jones A729,O=Google,C=US,DC=cilogon,DC=org</subject>
   <permission>write</permission>
   <permission>changePermission</permission>
  </allow>
  <allow>
   <subject>CN=Subject2,O=Google,C=US,DC=cilogon,DC=org</subject>
   <permission>write</permission>
   <permission>changePermission</permission>
  </allow>
  <allow>
   <subject>george</subject>
   <permission>read</permission>
  </allow>
  <allow>
   <subject>bill</subject>
   <permission>read</permission>
   <permission>write</permission>
  </allow>
 </accessPolicy>