Hi,
*Overview*
- The Enterprise Store (ES) is a generic store in the same vein as the
Google Play Store
- It allows users to manage and publish assets to a store front
- The ES consists of three applications:Store,Publisher and Social
- This mail deals with the Store and Publisher applications
- The Store app acts as the store front
- The Publisher app provides an interface for users to create , manage
and publish assets to the Store
- The next release of the GREG will include the Enterprise Store.This
will allow asset instances to be created using the Publisher rather than
the Carbon Console.
*Problem*
- The current permission model is tied in with a hard coded storage path
for assets.
- This means that all assets that are managed by the ES need to be
located in a specific storage
path:/{type}/@{overview_provider}/@{overview_name}/@{overview_version}.E.g.
/gadgets/@{overview_provider}/@{overview_name}/@{overview_version}
- However, the GREG has several RXTs that have varying storage paths and
cannot follow a storage path structure as defined above (E.g. service RXT
type which has the storage path as /trunk/services/@{namespace}/@{name})
- In such cases the ES permission model becomes moot
*ES Requirements*
- The ES has several requirements that are needed from any proposed
permission model
- Assume the presence of two users: User1 and User2
- *[ES-R1]* Assets that are created by User1 should not be visible to
User2.The only situation where an asset is visible to users other than the
creator (User1) would be if:
- User2 is a reviewer and the asset is in the In-review state (or
equivalent state as defined by the attached life-cycle)
- User2 is an administrator
- *[ES-R2] *Any user that can log into the Publisher must be able to
create/edit assets and be able to manage the life-cycle actions.
*Existing Permission Model*
- The current permission model involves partitioning collections based
on a provider name (the user that creates an asset)
- When a user logs into the Publisher for the very first time: he/she is
assigned a role such as Internal/private_{user} (created by the ES)
- This role is given read, write , delete and authorize permissions for
a collection created with the name of the user for each asset type managed
by the ES.
- *Example: *The storage path for gadgets is
/gadgets/@{overview_provider}/@{overview_name}/@{overview_version}
- For User1 ,the following collection will be created: /gadgets/user1
- All gadget instances created by User1 would be created under this
collection
- This model allows
- More details of this model can be found in mail threads which were
sent out last year [1][2]
*Main Issues *
- In the GREG model the storage path can be specified to be any path
- The GREG model mandates that the users must have a role that has read,
write and authorize permissions to a collection before they can create
assets.
- *Example: * User1 needs to create a service asset type instance in
the /_system/governance/trunk/services collection
- In order for User1 to be able to create an asset instance he/she
must have a role that has read, write and authorize permissions to that
collection
- *Note:* The visibility of the asset creation UI is handled by a
different set of permissions
- This approach prevents requirements ES-R1 and ES-R2 from been
satisfied
- It is not possible to have isolated user spaces as permissions
applied to a collection are inherited by resources and
collections within it
*Open Questions*
- How can we honour ES-R1 if the concept of a provider is removed and
the storage path is dynamic?
- *Proposed Solution:*
- A single role will be given read,write,delete and authorize
permissions to the root of a storage path (omitting dynamic
values).This
will be provided as an extension point for each asset type.
- The permissions will change based on the rules defined in the
life-cycle
- The visibility will be entirely governed by the life-cycle
definition
- This will be done by removing read permissions from roles based
on the current state of the asset (Currently there is
filtering logic in
the Publisher as read permissions cannot be removed from the
internal/everyone role)
- Should a user that logs into the Publisher be able to perform CRUD
operations on asset types without receiving permission to do so?
- Do we need to mimic the behaviour in the Carbon Console where by a
user must have a set of permissions to even view the asset creation page?
- The current GREG model allows admins to control permissions on a
per asset type basis.E.g. It is possible for User1 to have create rights
for Service asset type but not Gadgets
- This is at odds with ES-R2 requirement given above, where by a user
who logs into the Publisher can create any asset type instance
*Other Concerns*
- There have been suggestions that the permission model should change
from individual ownership to group ownership
- The original model of a single owner for a given asset tallied in with
the way other marketplaces work
- This caters to developers that publish content on their own
*References*
[1] [Architecture] The travelling Asset permission
[2] [Architecture] Meeting notes of regarding Traveling Asset permission
Thank You,
Sameera
--
Sameera Medagammaddegedara
Software Engineer
Contact:
Email: [email protected]
Mobile: + 94 077 255 3005
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev