This is an automated email from the ASF dual-hosted git repository.

mehul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 1c488dc  RANGER-2674 : Allow service admins to manage tag policies
1c488dc is described below

commit 1c488dc64acfa850da2426c3ed5ffc03397f224c
Author: Dhaval B. Shah <[email protected]>
AuthorDate: Fri Dec 20 18:51:09 2019 +0530

    RANGER-2674 : Allow service admins to manage tag policies
    
    Signed-off-by: Mehul Parikh <[email protected]>
---
 .../java/org/apache/ranger/biz/ServiceDBStore.java | 47 +++++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 4158900..ccda6ab 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -122,6 +122,7 @@ import org.apache.ranger.entity.XXPolicyLabelMap;
 import org.apache.ranger.entity.XXPolicyRefAccessType;
 import org.apache.ranger.entity.XXPolicyRefCondition;
 import org.apache.ranger.entity.XXPolicyRefResource;
+import org.apache.ranger.entity.XXPortalUser;
 import org.apache.ranger.entity.XXResourceDef;
 import org.apache.ranger.entity.XXSecurityZone;
 import org.apache.ranger.entity.XXService;
@@ -190,6 +191,7 @@ import org.apache.ranger.view.VXMetricServiceCount;
 import org.apache.ranger.view.VXMetricServiceNameCount;
 import org.apache.ranger.view.VXMetricUserGroupCount;
 import org.apache.ranger.view.VXPolicyLabelList;
+import org.apache.ranger.view.VXPortalUser;
 import org.apache.ranger.view.VXResponse;
 import org.apache.ranger.view.VXString;
 import org.apache.ranger.view.VXUser;
@@ -331,6 +333,9 @@ public class ServiceDBStore extends AbstractServiceStore {
        @Autowired
        RangerRoleService roleService;
 
+       @Autowired
+       UserMgr userMgr;
+
        private static volatile boolean legacyServiceDefsInitDone = false;
        private Boolean populateExistingBaseFields = false;
        
@@ -1529,7 +1534,6 @@ public class ServiceDBStore extends AbstractServiceStore {
                                        configValue = paddedEncryptedPwd;
                                }
                        }
-
                        XXServiceConfigMap xConfMap = new XXServiceConfigMap();
                        xConfMap = 
rangerAuditFields.populateAuditFields(xConfMap, xCreatedService);
                        xConfMap.setServiceId(xCreatedService.getId());
@@ -1540,6 +1544,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                        xConfMap.setConfigvalue(configValue);
                        xConfMap = xConfMapDao.create(xConfMap);
                }
+               updateTabPermissions(service.getType(), validConfigs);
                if (LOG.isDebugEnabled()) {
                        LOG.debug("vXUser:[" + vXUser + "]");
                }
@@ -1740,6 +1745,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                        xConfMap.setConfigvalue(configValue);
                        xConfMapDao.create(xConfMap);
                }
+               updateTabPermissions(service.getType(), validConfigs);
                if (LOG.isDebugEnabled()) {
                        LOG.debug("vXUser:[" + vXUser + "]");
                }
@@ -1800,6 +1806,45 @@ public class ServiceDBStore extends AbstractServiceStore 
{
                bizUtil.createTrxLog(trxLogList);
        }
 
+       private void updateTabPermissions(String svcType, Map<String, String> 
svcConfig) {
+               if (StringUtils.equalsIgnoreCase(svcType, 
EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
+                       String svcAdminUsers = 
svcConfig.get(SERVICE_ADMIN_USERS);
+                       if (StringUtils.isNotEmpty(svcAdminUsers)) {
+                               for (String user : svcAdminUsers.split(",")) {
+                                       
validateUserAndProvideTabTagBasedPolicyPermission(user.trim());
+                               }
+                       }
+               }
+
+       }
+
+       private void validateUserAndProvideTabTagBasedPolicyPermission(String 
username){
+               XXPortalUser xxPortalUser = 
daoMgr.getXXPortalUser().findByLoginId(username);
+               if (xxPortalUser == null) {
+                       throw restErrorUtil
+                                       .createRESTException(
+                                                       "Username : "
+                                                                       + 
username
+                                                                       + " 
does not exist. Please provide valid user as service admin for tag service .",
+                                                       
MessageEnums.ERROR_CREATING_OBJECT);
+               } else {
+                       VXPortalUser vXPortalUser = userMgr
+                                       
.mapXXPortalUserToVXPortalUserForDefaultAccount(xxPortalUser);
+                       if 
(CollectionUtils.isNotEmpty(vXPortalUser.getUserRoleList())
+                                       && 
vXPortalUser.getUserRoleList().size() == 1) {
+                               for (String userRole : 
vXPortalUser.getUserRoleList()) {
+                                       if 
(userRole.equals(RangerConstants.ROLE_USER)) {
+                                               HashMap<String, Long> 
moduleNameId = xUserMgr
+                                                               
.getAllModuleNameAndIdMap();
+                                               
xUserMgr.createOrUpdateUserPermisson(
+                                                               vXPortalUser,
+                                                               
moduleNameId.get(RangerConstants.MODULE_TAG_BASED_POLICIES),true);
+                                       }
+                               }
+                       }
+               }
+       }
+
        private void restrictIfZoneService(RangerService service)
        {
                String serviceName = service.getName();

Reply via email to