:-)

Am 12.12.2017 8:39 vorm. schrieb "Nikhil Dhamapurkar" <
[email protected]>:

> Hi Patrick, Steve
>
> Thank for your responses, I have made the changes similar to what you guys
> have suggested.
> The context relating to desk / Org  was helpful.
>
> I have flattened the many to many relation entity  (practicePractitioner)
> which relates a practice and a patient, the admin or a super user will link
> a practitioner with a practice in this entity this way not exposing all
> Practitioners to every user and this entity can have their own version of
> Practitioner Name or Shortname as well.
>
> Also, to relate the Desk / Context instead of extending the
> ApplicationUser class to save the current login information, I am saving
> the UserRole and Practice its Organization in a separate table
> (RoleMapping). I read the role mapping in the ApplicationTenancyEvaluator
> and Hide or disable the entity based on this information
>
> Completed most of the changes yesterday and I can see I have the control
> as needed for the entity based on these changes thank you for your
> suggestions.
>
> Regards
> Nikhil
>
> From: Patrick Pliessnig
> Sent: 07 December 2017 11:42
> To: [email protected]
> Subject: Re: Tenancy restriction - entity that relates to more
> thanoneOtherentity.
>
> I wonder whether a metaphor for context could do a better job?
>
> Say, 'desk' instead of context. Then the user would have a currentDesk on
> login
>
> To model the desk an interesting question might be, who organizes the desk?
> Is it the practice for more standardization or rather the practitioner for
> more individualization?
>
>
> Am 06.12.2017 11:35 nachm. schrieb "Stephen Cameron" <
> [email protected]>:
>
> > Oops, ignore that comment in the Person about tenancy paths, they aren't
> > needed (yet).
> >
> > On Thu, Dec 7, 2017 at 9:33 AM, Stephen Cameron <
> > [email protected]>
> > wrote:
> >
> > > Hi Nikil,
> > >
> > > The context switching that Patrick is speaking of is what I was
> > suggesting
> > > before, but to make this work I think you have to extend the default
> > > application user and record the current context on your extended
> > > ApplicationUser. I've just done a test on this for my cooperation
> > project.
> > > In my situatioin there is a many-to-many relationship between
> > Organisation
> > > and Person, ( I have an OrganisationPerson entity for the join, so can
> > set
> > > a status property for each, either active or inactive)
> > >
> > > So I have a Person that references a current Organisation (context)
> > >
> > > @PersistenceCapable(identityType = IdentityType.DATASTORE, schema =
> > > "cooperation")
> > > @Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
> > > @DomainObject()
> > > public class Person extends ApplicationUser {
> > >
> > >     /*
> > >      * Allow a default Organisation to be set on the current user.
> > >      *
> > >      * Organisations have a list of linked users/Persons, but one user
> > > might link to
> > >      * multiple Organisations, but we want to restrict the visibility
> to
> > > one Organisation at a time.
> > >      *
> > >      * We restrict access to all data usinf the security module tenancy
> > > path, but this requires
> > >      * a current Organisation, that is set here a login, by the user
> > > having only one link to an
> > >      * Organisation, or, the user selecting one specifically. In the
> > later
> > > case the currently operating
> > >      * one will be saved from session to session.
> > >      *
> > >      */
> > >     @Column(allowsNull="true", name="organisation_id")
> > >     @Getter
> > >     @Setter(value=AccessLevel.PACKAGE)
> > >     private Organisation organisation;
> > >
> > > ...
> > >
> > > }
> > >
> > > Person is used by the security module instead of default
> ApplicationUser
> > > by having a domain service as follows:
> > >
> > > @DomainService(nature=NatureOfService.DOMAIN)
> > > public class MyApplicationUserFactory implements
> ApplicationUserFactory {
> > >
> > >     @Override
> > >     public ApplicationUser newApplicationUser() {
> > >         final ApplicationUser object = new Person();
> > >         serviceRegistry.injectServicesInto(object);
> > >         return object;
> > >     }
> > >
> > >     @javax.inject.Inject
> > >     RepositoryService repositoryService;
> > >     @javax.inject.Inject
> > >     ServiceRegistry2 serviceRegistry;
> > > }
> > >
> > > Then to control what Organisation a person can see at any one time I
> > have:
> > >
> > > @DomainService(nature = NatureOfService.DOMAIN)
> > > public class TenancyPathEvaluatorForCooperation implements
> > > ApplicationTenancyEvaluator {
> > >     @Override
> > >     public boolean handles(final Class<?> cls) {
> > >         return Organisation.class == cls;
> > >     }
> > >
> > >     @Override
> > >     public String disables(Object arg0, ApplicationUser arg1) {
> > >         return null;
> > >     }
> > >
> > >     @Override
> > >     public String hides(Object arg0, ApplicationUser arg1) {
> > >         if (((Organisation) arg0).equals(((Person)
> > > arg1).getOrganisation()))
> > >             return null;
> > >         else
> > >             return "Organisation access prevented";
> > >     }
> > > }
> > >
> > >
> > > Note: This has yet to be extended to handle all classes that are linked
> > to
> > > an Organisation!
> > >
> > > One thing I  have not done is to allow a user to switch their
> > Organisation
> > > context, this is simply done by presenting a list of Organisations
> based
> > on
> > > the list of OrganisationPerson entities that reference their Person
> > entity,
> > > which is what the security module returns as the logged in user. I
> think
> > > this is how this should be accessed:
> > >
> > > Person user = (Person) userRepo.findByUsernameCached(
> > > users.getUser().getName());
> > >
> > > @Inject
> > > ApplicationUserRepository userRepo;
> > > @Inject
> > > UserService users;
> > >
> > > Steve
> > >
> > >
> > >
> > > On Thu, Dec 7, 2017 at 2:33 AM, Patrick Pliessnig <[email protected]
> >
> > > wrote:
> > >
> > >> Hi Nikhil
> > >>
> > >> This note is not about tenancy but about domain model.
> > >>
> > >> It seems to me that your practitioners (users) switch contexts
> according
> > >> to their current needs. Such a context could define the practice which
> > is
> > >> used to filter patients or it could define a location out in the
> > outback if
> > >> it is a flying doctor. In the case of a location the context defines a
> > >> collection of local practices to filter patients.
> > >>
> > >> If you model contexts as domain entities you could use them to filter
> > the
> > >> patients the way you want. The practitioner could create his own
> > contexts
> > >> and everytime he logs in he activates the context he needs or the last
> > >> activated context is used. If he then wants to list all patients only
> > the
> > >> patients filtered by the active context are shown.
> > >>
> > >> hth
> > >> Patrick
> > >>
> > >>
> > >>
> > >> Am 06.12.2017 um 15:07 schrieb Nikhil Dhamapurkar:
> > >>
> > >>> I have made some progress in implementing tenancy, I would like to
> know
> > >>> if there is a better way someone has tried to use Tenancy interface
> > >>> ApplicationTenancyEvaluator to apply on embedded Collections ?
> > >>>
> > >>> Example:
> > >>> Patient has many to many relationship with practice  how  can I best
> > >>> Hide or Disable Practice that should not be shown to the logged in
> user
> > >>> when he views Patient?
> > >>> Patient  ←→ Practice  ( many to many)
> > >>>
> > >>> Regards
> > >>> Nikhil
> > >>>
> > >>> From: Nikhil Dhamapurkar
> > >>> Sent: 01 December 2017 11:27
> > >>> To: [email protected]
> > >>> Subject: RE: Tenancy restriction - entity that relates to more than
> > >>> oneOtherentity.
> > >>>
> > >>> Hi Steve, Patrick
> > >>>
> > >>> As Steve suggested I had a table where I had Practice to Role mapping
> > >>> instead of user as one of the use case is to see all Patients
> > belonging to
> > >>> a role / Org which if we switch user and Practice we wont see all
> > patients
> > >>> belonging to an org but my approach can display or restrict based on
> > one
> > >>> role if the user belongs to more than one role hence its not entirely
> > >>> useful as well.
> > >>>
> > >>> Based on the input I am planning to make below changes :
> > >>>
> > >>> As Patrick has suggested I will be creating an entity  Patient (
> > >>> PatientInternalDetails, PracticePatients)     - internal details as
> > things
> > >>> like Medical records etc.
> > >>> PracticePatients will have  additional fields which are Ok to be
> > >>> displayed to user with permissions, and we have taken a call that
> > entity
> > >>> Patient is Ok to be visible only to admin users ( say “/”).
> > >>>
> > >>> Also will be exploring : https://isis.apache.org/guides
> > >>> /rgcms/rgcms.html#_rgcms_classes_super_AbstractViewModel
> > >>> If I can make changes in view instead of Domain Model.
> > >>>
> > >>> Regards
> > >>> Nikhil
> > >>>
> > >>> From: Stephen Cameron
> > >>> Sent: 01 December 2017 03:37
> > >>> To: [email protected]
> > >>> Subject: Re: Tenancy restriction - entity that relates to more than
> one
> > >>> Otherentity.
> > >>>
> > >>> Or, maybe just switching the role and setting a practice value after
> > >>> logging in, then you have to switch the role back to the simple
> 'login'
> > >>> one
> > >>> on logout, so that the next time they login they'll see that simple
> > >>> practice selection menu again.
> > >>>
> > >>> On Fri, Dec 1, 2017 at 7:49 AM, Stephen Cameron <
> > >>> [email protected]>
> > >>> wrote:
> > >>>
> > >>> I think that making use of a custom ApplicationUser (explained in the
> > >>>> security module notes) with a property practice may be necessary.
> > >>>>
> > >>>> Then Practioners would either log in as a specific user depending on
> > >>>> what
> > >>>> practice they are working at, or you might be able to make a switch
> > >>>> happen
> > >>>> behind the scenes, such that they always login as one application
> > user,
> > >>>> with only 1 menu option allowing them to choose a practice and the
> > >>>> system
> > >>>> switches their application user to a practice specific generated
> user
> > >>>> with
> > >>>> a role giving full menu access.
> > >>>>
> > >>>>
> > >>>> On Fri, Dec 1, 2017 at 1:58 AM, Patrick Pliessnig <
> > >>>> [email protected]>
> > >>>> wrote:
> > >>>>
> > >>>> Hi Nikhil
> > >>>>>
> > >>>>> I guess this ultimately relates to the question how a practice
> knows
> > >>>>> about
> > >>>>> its patients and the related access path.
> > >>>>>
> > >>>>> With tenancy the answer is: the patients are the ones with access
> > >>>>> rights
> > >>>>> for the practice.
> > >>>>>
> > >>>>> Maybe you could use a practice attribute 'practicePatients'. Then
> the
> > >>>>> answer is: the patients are the ones that use the services of the
> > >>>>> practice.
> > >>>>> (Many to many).
> > >>>>>
> > >>>>> Patrick
> > >>>>>
> > >>>>>
> > >>>>> Am 30.11.2017 12:58 nachm. schrieb "Nikhil Dhamapurkar"
> > >>>>> <nikhil.dhamapurkar@
> > >>>>> healthengine.com.au>:
> > >>>>>
> > >>>>> Hi,
> > >>>>>
> > >>>>> I am working on supporting Multi Tenancy in Apache ISIS I have
> tried
> > >>>>> both
> > >>>>> 1) ApplicationTenancyEvaluator and 2) HasAtPath interfaces to
> control
> > >>>>> what
> > >>>>> the  logged in user can see or execute.
> > >>>>>
> > >>>>> I have been able to make them work to an acceptable state but I
> face
> > >>>>> issue
> > >>>>> when I come across collections that are part of the entity I am
> > >>>>> evaluating.
> > >>>>>
> > >>>>> My Domain model has Patient  / Practitioner entity both these
> entity
> > >>>>> can
> > >>>>> be
> > >>>>> associated with Different Practices at the same time.
> > >>>>>
> > >>>>>
> > >>>>> Example :    PractitionerA belongs to PracticeA and PracticeB both,
> > >>>>> logged
> > >>>>> in User has “Role” to Access PracticeA.
> > >>>>>
> > >>>>> Issue with ApplicationTenancyEvaluator : since Practitioner and
> > >>>>> Practice
> > >>>>> have many to many relation even if the role has access to only one
> > >>>>> practice
> > >>>>> I’ll end up displaying PracticeB on wicket viewer which I want to
> > >>>>> prevent,
> > >>>>> Is it possible ?
> > >>>>>
> > >>>>>
> > >>>>> Issue with HasAtPath :
> > >>>>>
> > >>>>> I am creating  Path programmatically with pattern as :
> > >>>>> ORG/org/PRACTICE/<practiceName>/  pattern which models a tree,
> then
> > I
> > >>>>> can
> > >>>>> control user access to more than one Patient data if user at path
> is
> > >>>>> /ORG/org Or restrict  access to one practice
> > >>>>> /ORG/org/PRACTICE/practiceA
> > >>>>> If the Patient Entity is associated with more than one practice My
> > >>>>> logic
> > >>>>> will Break as I would not know what should be the context for the
> for
> > >>>>> ORG/org/PRACTICE/<WhatShouldBeHere?>
> > >>>>>
> > >>>>> Does anyone have a better solution to tackle tenancy for a
> Collection
> > >>>>> within an entity?
> > >>>>>
> > >>>>> Regards
> > >>>>> Nikhil
> > >>>>>
> > >>>>>
> > >>>>
> > >>>
> > >>>
> > >>
> > >
> >
>
>

Reply via email to