Developing role-based security question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • craig

    #1

    Developing role-based security question

    I am working on my first .NET development project that involves custom
    role-based security per the project requirements. This lead to a general
    design issue this week that really caused us some concern. I have described
    the situation below because we are very curious to see what other, more
    experienced, developers might suggest. The specific classes and fields are
    used just to illustrate the concepts.

    Our application uses role-based authorization security. Thus, we allow the
    administrator to define roles to which the can define various permissions.
    Permissions are defined relative to the various entities in the application,
    such as Users, Customers, Services, etc. One such role might be defined as
    follows:

    Role: Administrator
    Permissions: Add User, Delete User, View User, Update User

    Thus a user that is added to the Administrator role is granted permission to
    add, delete, view and update User entities. Once such a user is
    authenticated, they will be authorized to perform those actions.

    Now, consider that the User entity is abstracted by a User class, and
    suppose that class has a Username field (among others). If an authenticated
    user indicated that they would like to edit the Username field of a system
    User entity, the system first checks to see what role the authenticated user
    is in. If they are in an administrator role, they have the desired "Update
    User" privilege described above, so the system instantiates a User object
    and presents it to the user for editing. If, however, the user does not have
    this permission, their request is denied and the system does not instantiate
    an object.

    So far, so good.

    Now, suppose that another requirement is that ANY user that is logged into
    the system must be granted permission to edit their own Username, regardless
    of what role they are in. In otherwords, the currently authenticated user
    should always be granted the ability edit their own Username.

    Now, here is where we ran into a problem. If the currently authenticated
    user would like to update their Username field, but they are not in an
    Administrator role, the system will not allow the User object to be
    instantiated, so they will not be able to edit their Username as desired.
    The object that provides the functionality needed is not accessible. As we
    began to think about this situation, it was not clear how best to solve the
    problem and it lead to quite a bit of discussion. Naturally, we wondered if
    this is a common problem for which there is a consensus solution in the
    developer community, or whether there was just something inherently wrong
    with our role-based security model, our object model or our logic.

    Here are some of the solutions we considered. I was hoping to hear what
    others think.

    1. Create a hidden "System" role which has all possible permissions. Add a
    hidden "System" user to this role. Anytime such a situation occurs, log out
    the current user, log in the System user, perform the desired actions, then
    log the current user back in.

    2. Create a different class, with different security logic, that can be used
    to expose the proper Username field to the currently authenticated user for
    editing. This would mean that a single field in the DB would be editable
    through two different classes.

    3. Add additionaly security logic to the User class such that it functions
    as follows: If the authenticated user requesting a User object has Update
    User permission, instantiate the requesed User object. If the authenticated
    user
    does not have Update User permission, allow them the ability to instantiate
    only the User entity that corresponds to themselves, and expose only the
    Username field for editing (make all other fields read-only).

    Any thoughts on the problem in general or the possible solutions? As we
    thought about this situation and its possible solutions, it raised a few
    other questions:

    1. Is it considered good design for two different classes to both provide
    read/write access to the same field in the database?

    2. Does the use of a "SuperUser" account as described constitute a breech of
    security?

    3. Is it possible for a situation to arise in which the system might not be
    able to discern the security context of a request to instantiate an object?
    If so, would it be acceptable to use a parameter to communicate that
    context?

    Thanks!


  • Angelos Karantzalis

    #2
    Re: Developing role-based security question

    Perhaps a solution - although a slightly more complex one - would be to
    explictly set permissions on the user object, rather than the role. What i
    mean is, in Windows, any user can belong to groups and get some permission
    based on this group membership. However, you can also explicitly set a
    permission on the user to say, read a file.

    I'd think that in the plumbing, upon instantiation of the User (or perhaps
    Identity ) object, it is assigned permissions directly. So, I pseudo-code,
    on the constructor of your data class there should be something like:

    public myClass() {
    new DataAccessPermi ssion(DataAcces sPermission.Rea d)Demand();
    // etc etc.
    }

    .... that permission demanding code should also be present in the properties
    of your class.

    What needs to be done for this though, is create your Permission sub-classes
    ( if an existing Permission class doesn't cover your requirements ), amd
    possible implement some "plumbing" inside them to access the permission
    you've set on the current user object. It's a bit tricky coding, but once
    you've got it, you've a perfect case of re-use for almost any project
    afterwards.

    I think it's worth taking the time, actually I was planning to create that
    sort of thing for the needs of my company as well in the near future,
    because we're gonna re-use it in almost any project that requires security.

    ( This is actually a Java-driven approach, but I think the 2 frameworks are
    more-or-less equivalent in functionality, so it shouldn't be very difficult
    to implement without any major difficulties )

    Hope this helped,

    Angel
    O:]


    "craig" <e@mail.com> wrote in message
    news:eD2XGiIuEH A.2196@TK2MSFTN GP14.phx.gbl...[color=blue]
    > I am working on my first .NET development project that involves custom
    > role-based security per the project requirements. This lead to a general
    > design issue this week that really caused us some concern. I have[/color]
    described[color=blue]
    > the situation below because we are very curious to see what other, more
    > experienced, developers might suggest. The specific classes and fields are
    > used just to illustrate the concepts.
    >
    > Our application uses role-based authorization security. Thus, we allow the
    > administrator to define roles to which the can define various permissions.
    > Permissions are defined relative to the various entities in the[/color]
    application,[color=blue]
    > such as Users, Customers, Services, etc. One such role might be defined as
    > follows:
    >
    > Role: Administrator
    > Permissions: Add User, Delete User, View User, Update User
    >
    > Thus a user that is added to the Administrator role is granted permission[/color]
    to[color=blue]
    > add, delete, view and update User entities. Once such a user is
    > authenticated, they will be authorized to perform those actions.
    >
    > Now, consider that the User entity is abstracted by a User class, and
    > suppose that class has a Username field (among others). If an[/color]
    authenticated[color=blue]
    > user indicated that they would like to edit the Username field of a system
    > User entity, the system first checks to see what role the authenticated[/color]
    user[color=blue]
    > is in. If they are in an administrator role, they have the desired "Update
    > User" privilege described above, so the system instantiates a User object
    > and presents it to the user for editing. If, however, the user does not[/color]
    have[color=blue]
    > this permission, their request is denied and the system does not[/color]
    instantiate[color=blue]
    > an object.
    >
    > So far, so good.
    >
    > Now, suppose that another requirement is that ANY user that is logged into
    > the system must be granted permission to edit their own Username,[/color]
    regardless[color=blue]
    > of what role they are in. In otherwords, the currently authenticated user
    > should always be granted the ability edit their own Username.
    >
    > Now, here is where we ran into a problem. If the currently authenticated
    > user would like to update their Username field, but they are not in an
    > Administrator role, the system will not allow the User object to be
    > instantiated, so they will not be able to edit their Username as desired.
    > The object that provides the functionality needed is not accessible. As we
    > began to think about this situation, it was not clear how best to solve[/color]
    the[color=blue]
    > problem and it lead to quite a bit of discussion. Naturally, we wondered[/color]
    if[color=blue]
    > this is a common problem for which there is a consensus solution in the
    > developer community, or whether there was just something inherently wrong
    > with our role-based security model, our object model or our logic.
    >
    > Here are some of the solutions we considered. I was hoping to hear what
    > others think.
    >
    > 1. Create a hidden "System" role which has all possible permissions. Add a
    > hidden "System" user to this role. Anytime such a situation occurs, log[/color]
    out[color=blue]
    > the current user, log in the System user, perform the desired actions,[/color]
    then[color=blue]
    > log the current user back in.
    >
    > 2. Create a different class, with different security logic, that can be[/color]
    used[color=blue]
    > to expose the proper Username field to the currently authenticated user[/color]
    for[color=blue]
    > editing. This would mean that a single field in the DB would be editable
    > through two different classes.
    >
    > 3. Add additionaly security logic to the User class such that it functions
    > as follows: If the authenticated user requesting a User object has Update
    > User permission, instantiate the requesed User object. If the[/color]
    authenticated[color=blue]
    > user
    > does not have Update User permission, allow them the ability to[/color]
    instantiate[color=blue]
    > only the User entity that corresponds to themselves, and expose only the
    > Username field for editing (make all other fields read-only).
    >
    > Any thoughts on the problem in general or the possible solutions? As we
    > thought about this situation and its possible solutions, it raised a few
    > other questions:
    >
    > 1. Is it considered good design for two different classes to both provide
    > read/write access to the same field in the database?
    >
    > 2. Does the use of a "SuperUser" account as described constitute a breech[/color]
    of[color=blue]
    > security?
    >
    > 3. Is it possible for a situation to arise in which the system might not[/color]
    be[color=blue]
    > able to discern the security context of a request to instantiate an[/color]
    object?[color=blue]
    > If so, would it be acceptable to use a parameter to communicate that
    > context?
    >
    > Thanks!
    >
    >[/color]


    Comment

    • Angelos Karantzalis

      #3
      Re: Developing role-based security question

      Actually, I've just found something that might make your life much easier,
      and you can combine it with the previous post:

      String id1 = "Bob";
      String role1 = null;
      PrincipalPermis sion PrincipalPerm1 = new PrincipalPermis sion(id1, role1);

      String id2 = null;
      String role2 = "Supervisor ";
      PrincipalPermis sion PrincipalPerm2 = new PrincipalPermis sion(id2, role2);

      (PrincipalPerm1 .Union(Principa lPerm2)).Demand ();

      The following code will demand that the current IPrincipal of the system is
      either user "Bob", or that the current IPrincipal is a "Supervisor " ... in
      that manner, you can specify that the user accessing your data class is
      either an Admin, or the user with the username specified by the class
      instance itself - the only disadvantage is that upon construction of the
      data object, you don't really know the username contained inside the
      instance you're loading without doing a "select" from the DB ... but, almost
      nothing is perfect, innit ? You get some small performance overhead, but
      great ease-of-use codewise

      O:]




      "Angelos Karantzalis" <akarantzalis@a giltech.gr> wrote in message
      news:#Ky7T0muEH A.3456@TK2MSFTN GP14.phx.gbl...[color=blue]
      > Perhaps a solution - although a slightly more complex one - would be to
      > explictly set permissions on the user object, rather than the role. What i
      > mean is, in Windows, any user can belong to groups and get some permission
      > based on this group membership. However, you can also explicitly set a
      > permission on the user to say, read a file.
      >
      > I'd think that in the plumbing, upon instantiation of the User (or perhaps
      > Identity ) object, it is assigned permissions directly. So, I pseudo-code,
      > on the constructor of your data class there should be something like:
      >
      > public myClass() {
      > new DataAccessPermi ssion(DataAcces sPermission.Rea d)Demand();
      > // etc etc.
      > }
      >
      > ... that permission demanding code should also be present in the[/color]
      properties[color=blue]
      > of your class.
      >
      > What needs to be done for this though, is create your Permission sub-class[/color]
      es[color=blue]
      > ( if an existing Permission class doesn't cover your requirements ), amd
      > possible implement some "plumbing" inside them to access the permission
      > you've set on the current user object. It's a bit tricky coding, but once
      > you've got it, you've a perfect case of re-use for almost any project
      > afterwards.
      >
      > I think it's worth taking the time, actually I was planning to create that
      > sort of thing for the needs of my company as well in the near future,
      > because we're gonna re-use it in almost any project that requires[/color]
      security.[color=blue]
      >
      > ( This is actually a Java-driven approach, but I think the 2 frameworks[/color]
      are[color=blue]
      > more-or-less equivalent in functionality, so it shouldn't be very[/color]
      difficult[color=blue]
      > to implement without any major difficulties )
      >
      > Hope this helped,
      >
      > Angel
      > O:]
      >
      >
      > "craig" <e@mail.com> wrote in message
      > news:eD2XGiIuEH A.2196@TK2MSFTN GP14.phx.gbl...[color=green]
      > > I am working on my first .NET development project that involves custom
      > > role-based security per the project requirements. This lead to a general
      > > design issue this week that really caused us some concern. I have[/color]
      > described[color=green]
      > > the situation below because we are very curious to see what other, more
      > > experienced, developers might suggest. The specific classes and fields[/color][/color]
      are[color=blue][color=green]
      > > used just to illustrate the concepts.
      > >
      > > Our application uses role-based authorization security. Thus, we allow[/color][/color]
      the[color=blue][color=green]
      > > administrator to define roles to which the can define various[/color][/color]
      permissions.[color=blue][color=green]
      > > Permissions are defined relative to the various entities in the[/color]
      > application,[color=green]
      > > such as Users, Customers, Services, etc. One such role might be defined[/color][/color]
      as[color=blue][color=green]
      > > follows:
      > >
      > > Role: Administrator
      > > Permissions: Add User, Delete User, View User, Update User
      > >
      > > Thus a user that is added to the Administrator role is granted[/color][/color]
      permission[color=blue]
      > to[color=green]
      > > add, delete, view and update User entities. Once such a user is
      > > authenticated, they will be authorized to perform those actions.
      > >
      > > Now, consider that the User entity is abstracted by a User class, and
      > > suppose that class has a Username field (among others). If an[/color]
      > authenticated[color=green]
      > > user indicated that they would like to edit the Username field of a[/color][/color]
      system[color=blue][color=green]
      > > User entity, the system first checks to see what role the authenticated[/color]
      > user[color=green]
      > > is in. If they are in an administrator role, they have the desired[/color][/color]
      "Update[color=blue][color=green]
      > > User" privilege described above, so the system instantiates a User[/color][/color]
      object[color=blue][color=green]
      > > and presents it to the user for editing. If, however, the user does not[/color]
      > have[color=green]
      > > this permission, their request is denied and the system does not[/color]
      > instantiate[color=green]
      > > an object.
      > >
      > > So far, so good.
      > >
      > > Now, suppose that another requirement is that ANY user that is logged[/color][/color]
      into[color=blue][color=green]
      > > the system must be granted permission to edit their own Username,[/color]
      > regardless[color=green]
      > > of what role they are in. In otherwords, the currently authenticated[/color][/color]
      user[color=blue][color=green]
      > > should always be granted the ability edit their own Username.
      > >
      > > Now, here is where we ran into a problem. If the currently authenticated
      > > user would like to update their Username field, but they are not in an
      > > Administrator role, the system will not allow the User object to be
      > > instantiated, so they will not be able to edit their Username as[/color][/color]
      desired.[color=blue][color=green]
      > > The object that provides the functionality needed is not accessible. As[/color][/color]
      we[color=blue][color=green]
      > > began to think about this situation, it was not clear how best to solve[/color]
      > the[color=green]
      > > problem and it lead to quite a bit of discussion. Naturally, we wondered[/color]
      > if[color=green]
      > > this is a common problem for which there is a consensus solution in the
      > > developer community, or whether there was just something inherently[/color][/color]
      wrong[color=blue][color=green]
      > > with our role-based security model, our object model or our logic.
      > >
      > > Here are some of the solutions we considered. I was hoping to hear what
      > > others think.
      > >
      > > 1. Create a hidden "System" role which has all possible permissions. Add[/color][/color]
      a[color=blue][color=green]
      > > hidden "System" user to this role. Anytime such a situation occurs, log[/color]
      > out[color=green]
      > > the current user, log in the System user, perform the desired actions,[/color]
      > then[color=green]
      > > log the current user back in.
      > >
      > > 2. Create a different class, with different security logic, that can be[/color]
      > used[color=green]
      > > to expose the proper Username field to the currently authenticated user[/color]
      > for[color=green]
      > > editing. This would mean that a single field in the DB would be editable
      > > through two different classes.
      > >
      > > 3. Add additionaly security logic to the User class such that it[/color][/color]
      functions[color=blue][color=green]
      > > as follows: If the authenticated user requesting a User object has[/color][/color]
      Update[color=blue][color=green]
      > > User permission, instantiate the requesed User object. If the[/color]
      > authenticated[color=green]
      > > user
      > > does not have Update User permission, allow them the ability to[/color]
      > instantiate[color=green]
      > > only the User entity that corresponds to themselves, and expose only the
      > > Username field for editing (make all other fields read-only).
      > >
      > > Any thoughts on the problem in general or the possible solutions? As we
      > > thought about this situation and its possible solutions, it raised a few
      > > other questions:
      > >
      > > 1. Is it considered good design for two different classes to both[/color][/color]
      provide[color=blue][color=green]
      > > read/write access to the same field in the database?
      > >
      > > 2. Does the use of a "SuperUser" account as described constitute a[/color][/color]
      breech[color=blue]
      > of[color=green]
      > > security?
      > >
      > > 3. Is it possible for a situation to arise in which the system might not[/color]
      > be[color=green]
      > > able to discern the security context of a request to instantiate an[/color]
      > object?[color=green]
      > > If so, would it be acceptable to use a parameter to communicate that
      > > context?
      > >
      > > Thanks!
      > >
      > >[/color]
      >
      >[/color]


      Comment

      • craig

        #4
        Re: Developing role-based security question

        Thanks Angelos. I really appreciate your taking the time to respond.

        I will spend some time to study your posts. Looks like some good input.

        "Angelos Karantzalis" <akarantzalis@a giltech.gr> wrote in message
        news:eWr3R6muEH A.1420@TK2MSFTN GP10.phx.gbl...[color=blue]
        > Actually, I've just found something that might make your life much easier,
        > and you can combine it with the previous post:
        >
        > String id1 = "Bob";
        > String role1 = null;
        > PrincipalPermis sion PrincipalPerm1 = new PrincipalPermis sion(id1, role1);
        >
        > String id2 = null;
        > String role2 = "Supervisor ";
        > PrincipalPermis sion PrincipalPerm2 = new PrincipalPermis sion(id2, role2);
        >
        > (PrincipalPerm1 .Union(Principa lPerm2)).Demand ();
        >
        > The following code will demand that the current IPrincipal of the system
        > is
        > either user "Bob", or that the current IPrincipal is a "Supervisor " ... in
        > that manner, you can specify that the user accessing your data class is
        > either an Admin, or the user with the username specified by the class
        > instance itself - the only disadvantage is that upon construction of the
        > data object, you don't really know the username contained inside the
        > instance you're loading without doing a "select" from the DB ... but,
        > almost
        > nothing is perfect, innit ? You get some small performance overhead, but
        > great ease-of-use codewise
        >
        > O:]
        >
        >
        >
        >
        > "Angelos Karantzalis" <akarantzalis@a giltech.gr> wrote in message
        > news:#Ky7T0muEH A.3456@TK2MSFTN GP14.phx.gbl...[color=green]
        >> Perhaps a solution - although a slightly more complex one - would be to
        >> explictly set permissions on the user object, rather than the role. What
        >> i
        >> mean is, in Windows, any user can belong to groups and get some
        >> permission
        >> based on this group membership. However, you can also explicitly set a
        >> permission on the user to say, read a file.
        >>
        >> I'd think that in the plumbing, upon instantiation of the User (or
        >> perhaps
        >> Identity ) object, it is assigned permissions directly. So, I
        >> pseudo-code,
        >> on the constructor of your data class there should be something like:
        >>
        >> public myClass() {
        >> new DataAccessPermi ssion(DataAcces sPermission.Rea d)Demand();
        >> // etc etc.
        >> }
        >>
        >> ... that permission demanding code should also be present in the[/color]
        > properties[color=green]
        >> of your class.
        >>
        >> What needs to be done for this though, is create your Permission
        >> sub-class[/color]
        > es[color=green]
        >> ( if an existing Permission class doesn't cover your requirements ), amd
        >> possible implement some "plumbing" inside them to access the permission
        >> you've set on the current user object. It's a bit tricky coding, but once
        >> you've got it, you've a perfect case of re-use for almost any project
        >> afterwards.
        >>
        >> I think it's worth taking the time, actually I was planning to create
        >> that
        >> sort of thing for the needs of my company as well in the near future,
        >> because we're gonna re-use it in almost any project that requires[/color]
        > security.[color=green]
        >>
        >> ( This is actually a Java-driven approach, but I think the 2 frameworks[/color]
        > are[color=green]
        >> more-or-less equivalent in functionality, so it shouldn't be very[/color]
        > difficult[color=green]
        >> to implement without any major difficulties )
        >>
        >> Hope this helped,
        >>
        >> Angel
        >> O:]
        >>
        >>
        >> "craig" <e@mail.com> wrote in message
        >> news:eD2XGiIuEH A.2196@TK2MSFTN GP14.phx.gbl...[color=darkred]
        >> > I am working on my first .NET development project that involves custom
        >> > role-based security per the project requirements. This lead to a
        >> > general
        >> > design issue this week that really caused us some concern. I have[/color]
        >> described[color=darkred]
        >> > the situation below because we are very curious to see what other, more
        >> > experienced, developers might suggest. The specific classes and fields[/color][/color]
        > are[color=green][color=darkred]
        >> > used just to illustrate the concepts.
        >> >
        >> > Our application uses role-based authorization security. Thus, we allow[/color][/color]
        > the[color=green][color=darkred]
        >> > administrator to define roles to which the can define various[/color][/color]
        > permissions.[color=green][color=darkred]
        >> > Permissions are defined relative to the various entities in the[/color]
        >> application,[color=darkred]
        >> > such as Users, Customers, Services, etc. One such role might be defined[/color][/color]
        > as[color=green][color=darkred]
        >> > follows:
        >> >
        >> > Role: Administrator
        >> > Permissions: Add User, Delete User, View User, Update User
        >> >
        >> > Thus a user that is added to the Administrator role is granted[/color][/color]
        > permission[color=green]
        >> to[color=darkred]
        >> > add, delete, view and update User entities. Once such a user is
        >> > authenticated, they will be authorized to perform those actions.
        >> >
        >> > Now, consider that the User entity is abstracted by a User class, and
        >> > suppose that class has a Username field (among others). If an[/color]
        >> authenticated[color=darkred]
        >> > user indicated that they would like to edit the Username field of a[/color][/color]
        > system[color=green][color=darkred]
        >> > User entity, the system first checks to see what role the authenticated[/color]
        >> user[color=darkred]
        >> > is in. If they are in an administrator role, they have the desired[/color][/color]
        > "Update[color=green][color=darkred]
        >> > User" privilege described above, so the system instantiates a User[/color][/color]
        > object[color=green][color=darkred]
        >> > and presents it to the user for editing. If, however, the user does not[/color]
        >> have[color=darkred]
        >> > this permission, their request is denied and the system does not[/color]
        >> instantiate[color=darkred]
        >> > an object.
        >> >
        >> > So far, so good.
        >> >
        >> > Now, suppose that another requirement is that ANY user that is logged[/color][/color]
        > into[color=green][color=darkred]
        >> > the system must be granted permission to edit their own Username,[/color]
        >> regardless[color=darkred]
        >> > of what role they are in. In otherwords, the currently authenticated[/color][/color]
        > user[color=green][color=darkred]
        >> > should always be granted the ability edit their own Username.
        >> >
        >> > Now, here is where we ran into a problem. If the currently
        >> > authenticated
        >> > user would like to update their Username field, but they are not in an
        >> > Administrator role, the system will not allow the User object to be
        >> > instantiated, so they will not be able to edit their Username as[/color][/color]
        > desired.[color=green][color=darkred]
        >> > The object that provides the functionality needed is not accessible. As[/color][/color]
        > we[color=green][color=darkred]
        >> > began to think about this situation, it was not clear how best to solve[/color]
        >> the[color=darkred]
        >> > problem and it lead to quite a bit of discussion. Naturally, we
        >> > wondered[/color]
        >> if[color=darkred]
        >> > this is a common problem for which there is a consensus solution in the
        >> > developer community, or whether there was just something inherently[/color][/color]
        > wrong[color=green][color=darkred]
        >> > with our role-based security model, our object model or our logic.
        >> >
        >> > Here are some of the solutions we considered. I was hoping to hear what
        >> > others think.
        >> >
        >> > 1. Create a hidden "System" role which has all possible permissions.
        >> > Add[/color][/color]
        > a[color=green][color=darkred]
        >> > hidden "System" user to this role. Anytime such a situation occurs, log[/color]
        >> out[color=darkred]
        >> > the current user, log in the System user, perform the desired actions,[/color]
        >> then[color=darkred]
        >> > log the current user back in.
        >> >
        >> > 2. Create a different class, with different security logic, that can be[/color]
        >> used[color=darkred]
        >> > to expose the proper Username field to the currently authenticated user[/color]
        >> for[color=darkred]
        >> > editing. This would mean that a single field in the DB would be
        >> > editable
        >> > through two different classes.
        >> >
        >> > 3. Add additionaly security logic to the User class such that it[/color][/color]
        > functions[color=green][color=darkred]
        >> > as follows: If the authenticated user requesting a User object has[/color][/color]
        > Update[color=green][color=darkred]
        >> > User permission, instantiate the requesed User object. If the[/color]
        >> authenticated[color=darkred]
        >> > user
        >> > does not have Update User permission, allow them the ability to[/color]
        >> instantiate[color=darkred]
        >> > only the User entity that corresponds to themselves, and expose only
        >> > the
        >> > Username field for editing (make all other fields read-only).
        >> >
        >> > Any thoughts on the problem in general or the possible solutions? As we
        >> > thought about this situation and its possible solutions, it raised a
        >> > few
        >> > other questions:
        >> >
        >> > 1. Is it considered good design for two different classes to both[/color][/color]
        > provide[color=green][color=darkred]
        >> > read/write access to the same field in the database?
        >> >
        >> > 2. Does the use of a "SuperUser" account as described constitute a[/color][/color]
        > breech[color=green]
        >> of[color=darkred]
        >> > security?
        >> >
        >> > 3. Is it possible for a situation to arise in which the system might
        >> > not[/color]
        >> be[color=darkred]
        >> > able to discern the security context of a request to instantiate an[/color]
        >> object?[color=darkred]
        >> > If so, would it be acceptable to use a parameter to communicate that
        >> > context?
        >> >
        >> > Thanks!
        >> >
        >> >[/color]
        >>
        >>[/color]
        >
        >[/color]


        Comment

        Working...