-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/71142/#review216799
-----------------------------------------------------------




security-admin/src/main/java/org/apache/ranger/common/db/BaseDao.java
Line 271 (original), 271 (patched)
<https://reviews.apache.org/r/71142/#comment304019>

    - updated updateUserIDReference() method handled only 2 specific columns 
"added_by_id" and "upd_by_id", while the earlier implementation was generic. 
Why is this change needed?
    - in a subsequent patch, please consider refactoring to isolate the 
knowledge of columnNames to respective DAOs, instead of XPortalUserService.java 
calling each DAO with specific column names
    
    class BaseDao {
      void removeXPortalUserIdRefs(Long userId) {
        Table    table       = tClass.getAnnotation(Table.class);
        String   tableName   = table != null ? table.name() : null;
        String[] columnNames = getColumnNameRefsToXPortalUserId();
        
        if (userId != null && tableName != null && columnNames != null && 
columnNames.length > 0) {
          for (String columnName : columnNames) {
            String sql  = "update " + tableName + " set " + columnName + "=null 
where " + columnName + "=?userId";
            Query query = 
getEntityManager().createNativeQuery(sql).setParameter("userId", userId);
            int   count = query.executeUpdate();
            
            if (count > 0){
              logger.warn(count + " records updated in table '" + tableName + 
"' with: set " + columnName + "=null where " + columnName + "=" + userId);
            }
          }
        }
      }
    
      // DAOs representing tables having columns that reference 
x_portal_user.id should override this method
      public String[] getColumnNameRefsToXPortalUserId() {
        return null;
      }
    }
    
    class XXRoleDao extends BaseDao<XXRole> {
      private static final String[] XPORTALUSER_ID_REFS = new String[] { 
"added_by_id, "upd_by_id" };
    
      ...
      
      @Override
      public String[] getColumnNameRefsToXPortalUserId() {
        return XPORTALUSER_ID_REFS;
      }
    }


- Madhan Neethiraj


On July 23, 2019, 9:48 a.m., Pradeep Agrawal wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/71142/
> -----------------------------------------------------------
> 
> (Updated July 23, 2019, 9:48 a.m.)
> 
> 
> Review request for ranger, Ankita Sinha, bhavik patel, Gautam Borad, Abhay 
> Kulkarni, Madhan Neethiraj, Mehul Parikh, Nikhil P, Nitin Galave, Ramesh 
> Mani, Sailaja Polavarapu, and Velmurugan Periasamy.
> 
> 
> Bugs: RANGER-2513
>     https://issues.apache.org/jira/browse/RANGER-2513
> 
> 
> Repository: ranger
> 
> 
> Description
> -------
> 
> **Problem Statement:**
> Created a security zone from a user. While trying to delete the same user, I 
> was unable to delete the user as "added_by_id" and "upd_by_id" field are 
> having references to x_portal_user(id). so due to foreign key constraint 
> ranger doesn't allow user deletion. 
> 
> 
> This is related to RANGER-2232 and RANGER-2414 as db schema has been changed 
> and new tables are also having "added_by_id" and "upd_by_id" columns.
> 
> 
> **Proposed Solution:**
> Proposed patch shall set the added_by_id and upd_by_id field value with null 
> value.
> 
> 
> Diffs
> -----
> 
>   security-admin/src/main/java/org/apache/ranger/common/db/BaseDao.java 
> 4f339087d 
>   
> security-admin/src/main/java/org/apache/ranger/service/XPortalUserService.java
>  493f139b3 
> 
> 
> Diff: https://reviews.apache.org/r/71142/diff/1/
> 
> 
> Testing
> -------
> 
> Steps performed for Ranger-admin(with patch):
> 1. Created Build with patch and untar the build.
> 2. Opened install.properties and provided db configuration in 
> install.properties
> 3. Called setup.sh
> 4. Started Ranger admin.
> 5. Logged in from admin user and created a user testuser1 with admin role. 
> Loggedout from admin account.
> 6. Logged in from testuser1 id and created a service and zone. added the 
> service in the zone. Loggedout from testuser1 account.
> 7. Logged in from admin user and delete user testuser1.
> 
> **Expected Behavior:**
> testuser1 should be deleted and foreign key references should be updated.
> 
> **Actual Behavior:**
> testuser1 was deleted and foreign key references was updated.
> 
> Note: Tested with MySQL, Oracle and Postgres db.
> 
> 
> Thanks,
> 
> Pradeep Agrawal
> 
>

Reply via email to