Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Acl xduser #146

Merged
merged 1 commit into from
Aug 3, 2017
Merged

Acl xduser #146

merged 1 commit into from
Aug 3, 2017

Conversation

ryanrath
Copy link
Contributor

@ryanrath ryanrath commented May 23, 2017

Description

Motivation and Context

Tests performed

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • My code follows the code style of this project as found in the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

@tyearke tyearke changed the base branch from xdmod6.7 to xdmod7.0 June 6, 2017 16:55
@tyearke tyearke added this to the v7.0.0 milestone Jun 6, 2017
@tyearke tyearke added the enhancement Enhancement of the functionality of an existing feature label Jun 7, 2017
@ryanrath ryanrath force-pushed the acl_xduser branch 2 times, most recently from a8e94da to 1215cd4 Compare June 19, 2017 19:47
if (null !== self::$_publicUser) {
return self::$_publicUser;
} else {
self::$_publicUser = self::getUserByUserName('Public User');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is the code that automatically creates the 'Public User' row in the database? I can't find it anywhere.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also as a coding standard comment:

I prefer to not repeat identical lines in the code unless it is unavoidable. I suggest the following, which I think is easier to see what is happening:

if (null === self::$_publicUser) {
    self::$_publicUser = self::getUserByUserName('Public User');
}
return self::$_publicUser;

shippable.yml Outdated
- cp ./configuration/portal_settings.ini ./configuration/portal_settings.ini.old
- cp -f /etc/xdmod/portal_settings.ini ./configuration/portal_settings.ini
- ./open_xdmod/modules/xdmod/component_tests/runtests.sh --log-junit `pwd`/shippable/testresults/componentresults.xml

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should restore the portal_settings.ini.old to its original location after running the tests (as we discussed before).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I did totally miss that. Latest commit mv's the portal_settings.ini.old back to portal_settings.ini.

Copy link
Member

@jpwhite4 jpwhite4 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't forget to squash commits.

- Bringing the format of XDUser up to speed before continuing with ACL
  modifications.

Adding models that support the Acl transition

- Adding a number of new models that act as:
    - a way to document and pin our code to a particular set of table columns
      for a particular code version
    - a shim between PDO result sets and the rest of our code as they have been
      built with the following use case in mind:
          $results = array();
          $rows = $db->query("SELECT * FROM some_table;");
          foreach($rows as $row) {
              $results []= new Model($row);
          }
      the model code takes care of mapping all of the columns to the correct
      properties. It works on a whitelist concept so any extraneous columns are
      ignored for the purposes property setting.
    - I added the @method annotations purely to make users lives a little easier
      as it explicitly lays out which functions are supported by each class.
      Meaning if they're new they don't need to dig into DBObject to find out
      what the $PROP_MAP does ( although they can obviously ). They can just
      rely on the class providing those methods.
- Added a 'service' class Acls ( service naming just being the plural of the
  model they support ) that provides a number of helper functions / encapsulates
  a great deal about the underlying table structure allowing the user to provide
  a few bits of information and let the service take care of the rest.

Porting XDUser changes from acls branch to this one

- These changes update the portions of the XDUser api to use the new acl tables
  / relations where possible. They make use of the new Model / Service classes
  that were added in previous commits.

Migrating isDeveloper to be based off of acls

- isDeveloper was previously based off of the roles array, now it's based off of
  acls.

Initializing _acls in the constructor of XDUser

- the _acls property needs to be initialized when XDUser is.

Updating the removeUser to use isPublicUser instead of active_role

- Just migrating this like the other instances of comparison to ROLE_ID_PUBLIC

While the return value cannot be false it could be empty

- to prevent accessing an array entry that doesn't exist added a conditional
  that only allow the access to occur if there is 1 or more records returned.

XDUserTest: tests the modified and newly added acl functions

- Huge caveat: to run these tests you need a fully functional xdmod install.
  Both database and generated classes.

- I have not included the generated coverage html but the % lines covered for
  the functions that were modified are as follows:
      - isDeveloper:                 100%
      - saveUser:                    95%
      - getToken:                    100%
      - getTokenExpiration:          100%
      - removeUser:                  96%
      - setInstitution:              90%
      - disassociateWithInstitution: 90%
      - setOrganizations:            90%
      - getRoles:                    100%
      - setRoles:                    100%
      - getPrimaryRole:              100%
      - getActiveRole:               100%
      - getAcls:                     100%
      - setAcls:                     100%
      - addAcl:                      100%
      - hasAcl:                      100%
      - hasAcls:                     100%
      - getUserByUserName:           100%

Namespace formatting fix

- Removed the extra line after the namespace.

Fixed invalid sql syntax

- The SQL syntax for 'deleteAcl' was invalid. You are not allowed to alias
  tables in a DELETE statement.

Simplifying the query / logic of addUserAcl

- Instead of issuing two database queries, one to find and another one to insert.
  We instead INSERT the results of a SELECT that will only return results if the
  record that would be inserted does not exist ( WHERE cur.user_acl_id IS NULL
  ).

Updating Acls function documentation

- Updated / Added documentation where it was missing / incorrect.

Updating XDUserTest to utilize pi

- Open XDMoD does not have the program officer user so use pi instead.
- Also update the default institution value to 0 as opposed to -1.

Clarifying getPublicUser

- minor code refactor to increase legibility per code review comment by
  @jpwhite4

Adding Component Test folder

- Adding a place for Component Tests to live. i.e. tests that require access to
  the database but are not doing so via the REST interface.

Adding sql script to create the Public User

- We now have the code in place to deal with an actual Public User, so we'll be
  adding it during the execution of the acl-import pipeline.

Adding component tests to shippable

Updated the XDUserTest namespace

- simple c/p mistake Updated so it reflects the current namespace.

Testing shippable changes to accommodate component tests

Add acl-import to be run during a fresh_install

Resolve Initial Acls not being set

- instead of directly assigning the incoming $role_set to _roles we instead
  utilize the function setRoles which will take care of keeping the acls in
  sync.
- remove the initialization of _acls to an empty array() as this would override
  the work done by setRoles.

- Also needed to remove the additional acl-import in
  integration_tests/scripts/bootstrap.sh as we need to see if the changes made
  to XDUser work as expected.

Adding some jobviewer tests to exercise the Acl code

- Added some integration tests to exercise the acl code via the single job
  viewer - job search end point.

Updating Usr Tests

- Missed the c/p from pi -> usr.

Removing JobViewerTests, these belong in the supremm module

Resolving spacing syntax issue

restoring portal_settings.ini from ini.old

- Adding a line per discussion with @jpwhite4 to restore the original
  portal_settings.ini ( from portal_settings.ini.old ).
@ryanrath ryanrath merged commit 4b55196 into ubccr:xdmod7.0 Aug 3, 2017
ryanrath added a commit to ryanrath/xdmod that referenced this pull request Sep 18, 2017
- Bringing the format of XDUser up to speed before continuing with ACL
  modifications.

Adding models that support the Acl transition

- Adding a number of new models that act as:
    - a way to document and pin our code to a particular set of table columns
      for a particular code version
    - a shim between PDO result sets and the rest of our code as they have been
      built with the following use case in mind:
          $results = array();
          $rows = $db->query("SELECT * FROM some_table;");
          foreach($rows as $row) {
              $results []= new Model($row);
          }
      the model code takes care of mapping all of the columns to the correct
      properties. It works on a whitelist concept so any extraneous columns are
      ignored for the purposes property setting.
    - I added the @method annotations purely to make users lives a little easier
      as it explicitly lays out which functions are supported by each class.
      Meaning if they're new they don't need to dig into DBObject to find out
      what the $PROP_MAP does ( although they can obviously ). They can just
      rely on the class providing those methods.
- Added a 'service' class Acls ( service naming just being the plural of the
  model they support ) that provides a number of helper functions / encapsulates
  a great deal about the underlying table structure allowing the user to provide
  a few bits of information and let the service take care of the rest.

Porting XDUser changes from acls branch to this one

- These changes update the portions of the XDUser api to use the new acl tables
  / relations where possible. They make use of the new Model / Service classes
  that were added in previous commits.

Migrating isDeveloper to be based off of acls

- isDeveloper was previously based off of the roles array, now it's based off of
  acls.

Initializing _acls in the constructor of XDUser

- the _acls property needs to be initialized when XDUser is.

Updating the removeUser to use isPublicUser instead of active_role

- Just migrating this like the other instances of comparison to ROLE_ID_PUBLIC

While the return value cannot be false it could be empty

- to prevent accessing an array entry that doesn't exist added a conditional
  that only allow the access to occur if there is 1 or more records returned.

XDUserTest: tests the modified and newly added acl functions

- Huge caveat: to run these tests you need a fully functional xdmod install.
  Both database and generated classes.

- I have not included the generated coverage html but the % lines covered for
  the functions that were modified are as follows:
      - isDeveloper:                 100%
      - saveUser:                    95%
      - getToken:                    100%
      - getTokenExpiration:          100%
      - removeUser:                  96%
      - setInstitution:              90%
      - disassociateWithInstitution: 90%
      - setOrganizations:            90%
      - getRoles:                    100%
      - setRoles:                    100%
      - getPrimaryRole:              100%
      - getActiveRole:               100%
      - getAcls:                     100%
      - setAcls:                     100%
      - addAcl:                      100%
      - hasAcl:                      100%
      - hasAcls:                     100%
      - getUserByUserName:           100%

Namespace formatting fix

- Removed the extra line after the namespace.

Fixed invalid sql syntax

- The SQL syntax for 'deleteAcl' was invalid. You are not allowed to alias
  tables in a DELETE statement.

Simplifying the query / logic of addUserAcl

- Instead of issuing two database queries, one to find and another one to insert.
  We instead INSERT the results of a SELECT that will only return results if the
  record that would be inserted does not exist ( WHERE cur.user_acl_id IS NULL
  ).

Updating Acls function documentation

- Updated / Added documentation where it was missing / incorrect.

Updating XDUserTest to utilize pi

- Open XDMoD does not have the program officer user so use pi instead.
- Also update the default institution value to 0 as opposed to -1.

Clarifying getPublicUser

- minor code refactor to increase legibility per code review comment by
  @jpwhite4

Adding Component Test folder

- Adding a place for Component Tests to live. i.e. tests that require access to
  the database but are not doing so via the REST interface.

Adding sql script to create the Public User

- We now have the code in place to deal with an actual Public User, so we'll be
  adding it during the execution of the acl-import pipeline.

Adding component tests to shippable

Updated the XDUserTest namespace

- simple c/p mistake Updated so it reflects the current namespace.

Testing shippable changes to accommodate component tests

Add acl-import to be run during a fresh_install

Resolve Initial Acls not being set

- instead of directly assigning the incoming $role_set to _roles we instead
  utilize the function setRoles which will take care of keeping the acls in
  sync.
- remove the initialization of _acls to an empty array() as this would override
  the work done by setRoles.

- Also needed to remove the additional acl-import in
  integration_tests/scripts/bootstrap.sh as we need to see if the changes made
  to XDUser work as expected.

Adding some jobviewer tests to exercise the Acl code

- Added some integration tests to exercise the acl code via the single job
  viewer - job search end point.

Updating Usr Tests

- Missed the c/p from pi -> usr.

Removing JobViewerTests, these belong in the supremm module

Resolving spacing syntax issue

restoring portal_settings.ini from ini.old

- Adding a line per discussion with @jpwhite4 to restore the original
  portal_settings.ini ( from portal_settings.ini.old ).
chakrabortyr pushed a commit to chakrabortyr/xdmod that referenced this pull request Oct 17, 2017
- Bringing the format of XDUser up to speed before continuing with ACL
  modifications.

Adding models that support the Acl transition

- Adding a number of new models that act as:
    - a way to document and pin our code to a particular set of table columns
      for a particular code version
    - a shim between PDO result sets and the rest of our code as they have been
      built with the following use case in mind:
          $results = array();
          $rows = $db->query("SELECT * FROM some_table;");
          foreach($rows as $row) {
              $results []= new Model($row);
          }
      the model code takes care of mapping all of the columns to the correct
      properties. It works on a whitelist concept so any extraneous columns are
      ignored for the purposes property setting.
    - I added the @method annotations purely to make users lives a little easier
      as it explicitly lays out which functions are supported by each class.
      Meaning if they're new they don't need to dig into DBObject to find out
      what the $PROP_MAP does ( although they can obviously ). They can just
      rely on the class providing those methods.
- Added a 'service' class Acls ( service naming just being the plural of the
  model they support ) that provides a number of helper functions / encapsulates
  a great deal about the underlying table structure allowing the user to provide
  a few bits of information and let the service take care of the rest.

Porting XDUser changes from acls branch to this one

- These changes update the portions of the XDUser api to use the new acl tables
  / relations where possible. They make use of the new Model / Service classes
  that were added in previous commits.

Migrating isDeveloper to be based off of acls

- isDeveloper was previously based off of the roles array, now it's based off of
  acls.

Initializing _acls in the constructor of XDUser

- the _acls property needs to be initialized when XDUser is.

Updating the removeUser to use isPublicUser instead of active_role

- Just migrating this like the other instances of comparison to ROLE_ID_PUBLIC

While the return value cannot be false it could be empty

- to prevent accessing an array entry that doesn't exist added a conditional
  that only allow the access to occur if there is 1 or more records returned.

XDUserTest: tests the modified and newly added acl functions

- Huge caveat: to run these tests you need a fully functional xdmod install.
  Both database and generated classes.

- I have not included the generated coverage html but the % lines covered for
  the functions that were modified are as follows:
      - isDeveloper:                 100%
      - saveUser:                    95%
      - getToken:                    100%
      - getTokenExpiration:          100%
      - removeUser:                  96%
      - setInstitution:              90%
      - disassociateWithInstitution: 90%
      - setOrganizations:            90%
      - getRoles:                    100%
      - setRoles:                    100%
      - getPrimaryRole:              100%
      - getActiveRole:               100%
      - getAcls:                     100%
      - setAcls:                     100%
      - addAcl:                      100%
      - hasAcl:                      100%
      - hasAcls:                     100%
      - getUserByUserName:           100%

Namespace formatting fix

- Removed the extra line after the namespace.

Fixed invalid sql syntax

- The SQL syntax for 'deleteAcl' was invalid. You are not allowed to alias
  tables in a DELETE statement.

Simplifying the query / logic of addUserAcl

- Instead of issuing two database queries, one to find and another one to insert.
  We instead INSERT the results of a SELECT that will only return results if the
  record that would be inserted does not exist ( WHERE cur.user_acl_id IS NULL
  ).

Updating Acls function documentation

- Updated / Added documentation where it was missing / incorrect.

Updating XDUserTest to utilize pi

- Open XDMoD does not have the program officer user so use pi instead.
- Also update the default institution value to 0 as opposed to -1.

Clarifying getPublicUser

- minor code refactor to increase legibility per code review comment by
  @jpwhite4

Adding Component Test folder

- Adding a place for Component Tests to live. i.e. tests that require access to
  the database but are not doing so via the REST interface.

Adding sql script to create the Public User

- We now have the code in place to deal with an actual Public User, so we'll be
  adding it during the execution of the acl-import pipeline.

Adding component tests to shippable

Updated the XDUserTest namespace

- simple c/p mistake Updated so it reflects the current namespace.

Testing shippable changes to accommodate component tests

Add acl-import to be run during a fresh_install

Resolve Initial Acls not being set

- instead of directly assigning the incoming $role_set to _roles we instead
  utilize the function setRoles which will take care of keeping the acls in
  sync.
- remove the initialization of _acls to an empty array() as this would override
  the work done by setRoles.

- Also needed to remove the additional acl-import in
  integration_tests/scripts/bootstrap.sh as we need to see if the changes made
  to XDUser work as expected.

Adding some jobviewer tests to exercise the Acl code

- Added some integration tests to exercise the acl code via the single job
  viewer - job search end point.

Updating Usr Tests

- Missed the c/p from pi -> usr.

Removing JobViewerTests, these belong in the supremm module

Resolving spacing syntax issue

restoring portal_settings.ini from ini.old

- Adding a line per discussion with @jpwhite4 to restore the original
  portal_settings.ini ( from portal_settings.ini.old ).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Enhancement of the functionality of an existing feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants