Repository: incubator-ranger
Updated Branches:
  refs/heads/master c498b0fc1 -> ced7c3b7a


RANGER-985 : Support download csv in Reports page as enhancement

Signed-off-by: Gautam Borad <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/7d452069
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/7d452069
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/7d452069

Branch: refs/heads/master
Commit: 7d452069c636419dcb5084292377f977487cf123
Parents: c498b0f
Author: Mehul Parikh <[email protected]>
Authored: Wed May 25 12:02:42 2016 +0530
Committer: Gautam Borad <[email protected]>
Committed: Mon May 30 17:58:04 2016 +0530

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   | 457 +++++++++++++++++--
 .../org/apache/ranger/rest/ServiceREST.java     |  36 ++
 .../scripts/views/reports/UserAccessLayout.js   | 158 ++++---
 .../scripts/views/users/UserTableLayout.js      |  57 +--
 security-admin/src/main/webapp/styles/xa.css    |  49 +-
 .../reports/UserAccessLayout_tmpl.html          |  14 +-
 .../templates/users/UserTableLayout_tmpl.html   |  14 +-
 7 files changed, 612 insertions(+), 173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7d452069/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
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 2f88a9b..c488d4a 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
@@ -27,13 +27,19 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.StringTokenizer;
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.text.SimpleDateFormat;
 import java.util.TreeMap;
 
 import javax.annotation.PostConstruct;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.collections.CollectionUtils;
@@ -1974,6 +1980,36 @@ public class ServiceDBStore extends AbstractServiceStore 
{
                writeExcel(policies, excelFileName, response);
        }
 
+       public void getPoliciesInCSV(List<RangerPolicy> policies, 
HttpServletResponse response) throws Exception {
+                               if (LOG.isDebugEnabled()) {
+                                       LOG.debug("==> 
ServiceDBStore.getPoliciesInCSV()");
+                               }
+                               InputStream in=null;
+                               ServletOutputStream out=null;
+                               String CSVFileName=null;
+                               try {
+                                       String timeStamp = new 
SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
+                                       CSVFileName = "Ranger_Policies_" + 
timeStamp + ".csv";
+                                       out = response.getOutputStream();
+                                       StringBuffer sb = writeCSV(policies, 
CSVFileName, response);
+                                       in = new 
ByteArrayInputStream(sb.toString().getBytes());
+                                       byte[] outputByte = new 
byte[sb.length()];
+                                       while (in.read(outputByte, 0, 
sb.length()) != -1) {
+                                               out.write(outputByte, 0, 
sb.length());
+                                       }
+                       }
+                               catch (Exception e) {
+                                        LOG.error("Error while generating 
report file " + CSVFileName, e);
+                                        e.printStackTrace();
+
+                               }
+                               finally {
+                                       in.close();
+                                       out.flush();
+                                       out.close();
+                               }
+                       }
+
        public PList<RangerPolicy> getPaginatedPolicies(SearchFilter filter) 
throws Exception {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> ServiceDBStore.getPaginatedPolicies(+ " 
+ filter + ")");
@@ -3090,19 +3126,42 @@ public class ServiceDBStore extends 
AbstractServiceStore {
 
                return false;
        }
+
        private void writeExcel(List<RangerPolicy> policies, String 
excelFileName, HttpServletResponse response)
                        throws IOException {
-               Workbook workbook=null;
-               OutputStream outStream =null;
-               try{
+               Workbook workbook = null;
+               OutputStream outStream = null;
+               try {
                        workbook = new HSSFWorkbook();
                        Sheet sheet = workbook.createSheet();
                        createHeaderRow(sheet);
                        int rowCount = 0;
-                       if (!CollectionUtils.isEmpty(policies)){
+                       if (!CollectionUtils.isEmpty(policies)) {
                                for (RangerPolicy policy : policies) {
-                                       Row row = sheet.createRow(++rowCount);
-                                       writeBook(policy, row);
+                                       long serviceType = 
daoMgr.getXXService().findByName(policy.getService()).getType();
+                                       List<RangerPolicyItem> policyItems = 
policy.getPolicyItems();
+                                       List<RangerRowFilterPolicyItem> 
rowFilterPolicyItems = policy.getRowFilterPolicyItems();
+                                       List<RangerDataMaskPolicyItem> 
dataMaskPolicyItems = policy.getDataMaskPolicyItems();
+
+                                       if 
(CollectionUtils.isNotEmpty(policyItems)) {
+                                               for (RangerPolicyItem 
policyItem : policyItems) {
+                                                       Row row = 
sheet.createRow(++rowCount);
+                                                       
writeBookForPolicyItems(policy, policyItem, null, null, row);
+                                               }
+                                       } else if 
(CollectionUtils.isNotEmpty(dataMaskPolicyItems)) {
+                                               for (RangerDataMaskPolicyItem 
dataMaskPolicyItem : dataMaskPolicyItems) {
+                                                       Row row = 
sheet.createRow(++rowCount);
+                                                       
writeBookForPolicyItems(policy, null, dataMaskPolicyItem, null, row);
+                                               }
+                                       } else if 
(CollectionUtils.isNotEmpty(rowFilterPolicyItems)) {
+                                               for (RangerRowFilterPolicyItem 
rowFilterPolicyItem : rowFilterPolicyItems) {
+                                                       Row row = 
sheet.createRow(++rowCount);
+                                                       
writeBookForPolicyItems(policy, null, null, rowFilterPolicyItem, row);
+                                               }
+                                       } else if (serviceType == 100) {
+                                               Row row = 
sheet.createRow(++rowCount);
+                                               writeBookForTag(policy, row);
+                                       }
                                }
                        }
                        ByteArrayOutputStream outByteStream = new 
ByteArrayOutputStream();
@@ -3112,36 +3171,351 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                        response.setContentLength(outArray.length);
                        response.setHeader("Expires:", "0");
                        response.setHeader("Content-Disposition", "attachment; 
filename=" + excelFileName);
-                       outStream=response.getOutputStream();
+                       outStream = response.getOutputStream();
                        outStream.write(outArray);
                        outStream.flush();
-               }catch(IOException ex){
+               } catch (IOException ex) {
                        LOG.error("Failed to create report file " + 
excelFileName, ex);
-               }catch(Exception ex){
+               } catch (Exception ex) {
                        LOG.error("Error while generating report file " + 
excelFileName, ex);
-               }finally{
-                       if(outStream!=null){
+               } finally {
+                       if (outStream != null) {
                                outStream.close();
                        }
-                       if(workbook!=null){
+                       if (workbook != null) {
                                workbook.close();
                        }
                }
        }
 
-       private void writeBook(RangerPolicy policy, Row row) {
+       private StringBuffer writeCSV(List<RangerPolicy> policies, String 
cSVFileName, HttpServletResponse response) {
+               response.setContentType("text/csv");
+               final String COMMA_DELIMITER = "|";
+               final String LINE_SEPARATOR = "\n";
+               final String FILE_HEADER = 
"ID|Name|Resources|Groups|Users|Accesses|Service Type|Status";
+               StringBuffer csvBuffer = new StringBuffer();
+               csvBuffer.append(FILE_HEADER);
+               csvBuffer.append(LINE_SEPARATOR);
+               for (RangerPolicy policy : policies) {
+                       String policyStatus = "";
+                       String policyName = "";
+                       String ServiceType = "";
+                       Long serviceTypeId = null;
+                       List<String> groups = new ArrayList<String>();
+                       List<String> users = new ArrayList<String>();
+                       List<RangerPolicyItemAccess> accesses = new 
ArrayList<RangerPolicyItemAccess>();
+                       String groupNames = "";
+                       String userNames = "";
+                       String accessType = "";
+                       String resValue = "";
+                       String resourceKeyVal = "";
+                       String resKey = "";
+                       policyName = policy.getName();
+                       policyName=policyName.replace("|", "");
+                       Long policyId = policy.getId();
+
+                       if (policy.getIsEnabled()) {
+                               policyStatus = "Enabled";
+                       } else {
+                               policyStatus = "Disabled";
+                       }
+                       XXService xxservice = 
daoMgr.getXXService().findByName(policy.getService());
+
+                       if (xxservice != null) {
+                               serviceTypeId = xxservice.getType();
+                               XXServiceDef xxservDef = 
daoMgr.getXXServiceDef().getById(serviceTypeId);
+                               if (xxservDef != null) {
+                                       ServiceType = xxservDef.getName();
+                               }
+                       }
+                       int policyType = policy.getPolicyType();
+                       List<RangerPolicyItem> policyItems = new 
ArrayList<RangerPolicyItem>();
+                       List<RangerPolicyItem> policyItems0 = new 
ArrayList<RangerPolicyItem>();
+                       List<RangerDataMaskPolicyItem> policyItems1 = new 
ArrayList<RangerDataMaskPolicyItem>();
+                       List<RangerRowFilterPolicyItem> policyItems2 = new 
ArrayList<RangerRowFilterPolicyItem>();
+                       switch (policyType) {
+                       case 0:
+                               policyItems0 = policy.getPolicyItems();
+                               policyItems.addAll(policyItems0);
+                               break;
+                       case 1:
+                               policyItems1 = policy.getDataMaskPolicyItems();
+                               policyItems.addAll(policyItems1);
+                               break;
+                       case 2:
+                               policyItems2 = policy.getRowFilterPolicyItems();
+                               policyItems.addAll(policyItems2);
+                               break;
+                       }
+
+                       if (serviceTypeId == 100) {
+                               Map<String, RangerPolicyResource> resources = 
policy.getResources();
+
+                               if (resources != null) {
+                                       for (Entry<String, 
RangerPolicyResource> resource : resources.entrySet()) {
+                                               resKey = resource.getKey();
+                                               RangerPolicyResource 
policyResource = resource.getValue();
+                                               List<String> resvalueList = 
policyResource.getValues();
+                                               resValue = 
resvalueList.toString();
+                                               resourceKeyVal = resourceKeyVal 
+ " " + resKey + "=" + resValue;
+                                               resourceKeyVal = 
resourceKeyVal.replace("|", "");
+                                       }
+                               }
+
+                               if (!CollectionUtils.isEmpty(policyItems)) {
+                                       for (RangerPolicyItem policyItem : 
policyItems) {
+                                               groupNames = "";
+                                               userNames = "";
+                                               accessType = "";
+                                               groups = null;
+                                               users = null;
+                                               accesses = null;
+                                               groups = policyItem.getGroups();
+                                               accesses = 
policyItem.getAccesses();
+                                               users = policyItem.getUsers();
+
+                                               for (RangerPolicyItemAccess 
access : accesses) {
+                                                       accessType = accessType 
+ access.getType().replace("#", "").replace("|","") + "#";
+                                               }
+                                               accessType = 
accessType.substring(0, accessType.lastIndexOf("#"));
+                                               if 
(CollectionUtils.isNotEmpty(groups)) {
+                                                       for (String group : 
groups){
+                                                               
group=group.replace("|", "");
+                                                               
group=group.replace("#", "");
+                                                               
groupNames=groupNames+group+ "#";
+                                                       }
+                                                       groupNames = 
groupNames.substring(0, groupNames.lastIndexOf("#"));
+                                               }
+
+                                               if 
(CollectionUtils.isNotEmpty(users)) {
+                                                       for (String user : 
users){
+                                                               
user=user.replace("|", "");
+                                                               
user=user.replace("#", "");
+                                                               
userNames=userNames +user + "#";
+                                                       }
+                                                       
userNames=userNames.substring(0,userNames.lastIndexOf("#"));
+                                               }
+
+                                               csvBuffer.append(policyId);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               csvBuffer.append(policyName);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               
csvBuffer.append(resourceKeyVal);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               csvBuffer.append(groupNames);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               csvBuffer.append(userNames);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               csvBuffer.append(accessType);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               csvBuffer.append(ServiceType);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               csvBuffer.append(policyStatus);
+                                               
csvBuffer.append(COMMA_DELIMITER);
+                                               
csvBuffer.append(LINE_SEPARATOR);
+
+                                       }
+                               } else {
+                                       csvBuffer.append(policyId);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(policyName);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(resourceKeyVal);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(groupNames);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(userNames);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(accessType);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(ServiceType);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(policyStatus);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(LINE_SEPARATOR);
+                               }
+                       }
+
+                       else {
+                               Map<String, RangerPolicyResource> resources = 
policy.getResources();
+                               if (resources != null) {
+                                       for (Entry<String, 
RangerPolicyResource> resource : resources.entrySet()) {
+                                               resKey = resource.getKey();
+                                               RangerPolicyResource 
policyResource = resource.getValue();
+                                               List<String> resvalueList = 
policyResource.getValues();
+                                               resValue = 
resvalueList.toString();
+                                               resourceKeyVal = resourceKeyVal 
+ " " + resKey + "=" + resValue;
+                                               resourceKeyVal = 
resourceKeyVal.replace("|", "");
+                                       }
+                               }
+
+                               for (RangerPolicyItem policyItem : policyItems) 
{
+                                       groups = null;
+                                       users = null;
+                                       accesses = null;
+                                       groupNames = "";
+                                       userNames = "";
+                                       accessType = "";
+                                       groups = policyItem.getGroups();
+                                       users = policyItem.getUsers();
+                                       accesses = policyItem.getAccesses();
+
+                                       if 
(CollectionUtils.isNotEmpty(accesses)) {
+                                               for (RangerPolicyItemAccess 
access : accesses) {
+                                                       accessType = accessType 
+ access.getType().replace("#", "").replace("|","") + "#";
+                                               }
+                                               accessType = 
accessType.substring(0, accessType.lastIndexOf("#"));
+                                       }
+                                       if (CollectionUtils.isNotEmpty(groups)) 
{
+                                               for (String group : groups){
+                                                       
group=group.replace("|", "");
+                                                       
group=group.replace("#", "");
+                                                       
groupNames=groupNames+group+ "#";
+                                               }
+                                               groupNames = 
groupNames.substring(0, groupNames.lastIndexOf("#"));
+                                       }
+                                       if (CollectionUtils.isNotEmpty(users)) {
+                                               for (String user : users){
+                                                       user=user.replace("|", 
"");
+                                                       user=user.replace("#", 
"");
+                                                       userNames=userNames 
+user + "#";
+                                               }
+                                               
userNames=userNames.substring(0,userNames.lastIndexOf("#"));
+                                       }
+                                       csvBuffer.append(policyId);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(policyName);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(resourceKeyVal);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(groupNames);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(userNames);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(accessType);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(ServiceType);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(policyStatus);
+                                       csvBuffer.append(COMMA_DELIMITER);
+                                       csvBuffer.append(LINE_SEPARATOR);
+                               }
+                       }
+               }
+               response.setHeader("Content-Disposition", "attachment; 
filename=" + cSVFileName);
+               return csvBuffer;
+       }
+
+       private void writeBookForPolicyItems(RangerPolicy policy, 
RangerPolicyItem policyItem,
+                       RangerDataMaskPolicyItem dataMaskPolicyItem, 
RangerRowFilterPolicyItem rowFilterPolicyItem, Row row) {
+               List<String> groups = new ArrayList<String>();
+               List<String> users = new ArrayList<String>();
+               String groupNames = "";
+               String userNames = "";
+               String accessType = "";
                String policyStatus = "";
                Cell cell = row.createCell(0);
                cell.setCellValue(policy.getId());
+               List<RangerPolicyItemAccess> accesses = new 
ArrayList<RangerPolicyItemAccess>();
                cell = row.createCell(1);
                cell.setCellValue(policy.getName());
                cell = row.createCell(2);
+               String resValue = "";
+               String resourceKeyVal = "";
+               String resKey = "";
+               Map<String, RangerPolicyResource> resources = 
policy.getResources();
+               if (resources != null) {
+                       for (Entry<String, RangerPolicyResource> resource : 
resources.entrySet()) {
+                               resKey = resource.getKey();
+                               RangerPolicyResource policyResource = 
resource.getValue();
+                               List<String> resvalueList = 
policyResource.getValues();
+                               resValue = resvalueList.toString();
+                               resourceKeyVal = resourceKeyVal + " " + resKey 
+ "=" + resValue;
+                       }
+
+                       cell.setCellValue(resourceKeyVal);
+                       if (policyItem != null && dataMaskPolicyItem == null && 
rowFilterPolicyItem == null) {
+                               groups = policyItem.getGroups();
+                               users = policyItem.getUsers();
+                               accesses = policyItem.getAccesses();
+                       } else if (dataMaskPolicyItem != null && policyItem == 
null && rowFilterPolicyItem == null) {
+                               groups = dataMaskPolicyItem.getGroups();
+                               users = dataMaskPolicyItem.getUsers();
+                               accesses = dataMaskPolicyItem.getAccesses();
+                       } else if (rowFilterPolicyItem != null && policyItem == 
null && dataMaskPolicyItem == null) {
+                               groups = rowFilterPolicyItem.getGroups();
+                               users = rowFilterPolicyItem.getUsers();
+                               accesses = rowFilterPolicyItem.getAccesses();
+                       }
+                       if (CollectionUtils.isNotEmpty(accesses)) {
+                               for (RangerPolicyItemAccess access : accesses) {
+                                       accessType = accessType + 
access.getType();
+                                       accessType = accessType + " ,";
+                               }
+                               accessType = accessType.substring(0, 
accessType.lastIndexOf(","));
+                       }
+                       if (CollectionUtils.isNotEmpty(groups)) {
+                               groupNames = groupNames + groups.toString();
+                               StringTokenizer groupToken = new 
StringTokenizer(groupNames, "[]");
+                               groupNames = groupToken.nextToken().toString();
+                       }
+                       if (CollectionUtils.isNotEmpty(users)) {
+                               userNames = userNames + users.toString();
+                               StringTokenizer userToken = new 
StringTokenizer(userNames, "[]");
+                               userNames = userToken.nextToken().toString();
+                       }
+                       cell = row.createCell(3);
+                       cell.setCellValue(groupNames);
+                       cell = row.createCell(4);
+                       cell.setCellValue(userNames);
+                       cell = row.createCell(5);
+                       cell.setCellValue(accessType.trim());
+                       cell = row.createCell(6);
+                       XXService xxservice = 
daoMgr.getXXService().findByName(policy.getService());
+                       String ServiceType = "";
+                       if (xxservice != null) {
+                               Long ServiceId = xxservice.getType();
+                               XXServiceDef xxservDef = 
daoMgr.getXXServiceDef().getById(ServiceId);
+                               if (xxservDef != null) {
+                                       ServiceType = xxservDef.getName();
+                               }
+                       }
+                       cell.setCellValue(ServiceType);
+                       cell = row.createCell(7);
+
+               }
                if (policy.getIsEnabled()) {
                        policyStatus = "Enabled";
                } else {
                        policyStatus = "Disabled";
                }
                cell.setCellValue(policyStatus);
+       }
+
+       private void writeBookForTag(RangerPolicy policy, Row row) {
+               String policyStatus = "";
+               Cell cell = row.createCell(0);
+               cell.setCellValue(policy.getId());
+               cell = row.createCell(1);
+               cell.setCellValue(policy.getName());
+               cell = row.createCell(2);
+               String resValue = "";
+               String resourceKeyVal = "";
+               String resKey = "";
+               String groupNames = "";
+               String userNames = "";
+               String accessType = "";
+               Map<String, RangerPolicyResource> resources = 
policy.getResources();
+               if (resources!=null) {
+                       for (Entry<String, RangerPolicyResource> resource : 
resources.entrySet()) {
+                               resKey = resource.getKey();
+                               RangerPolicyResource policyResource = 
resource.getValue();
+                               List<String> resvalueList = 
policyResource.getValues();
+                               resValue = resvalueList.toString();
+                               resourceKeyVal = resourceKeyVal + " " + resKey 
+ "=" + resValue;
+                       }
+               }
+               cell.setCellValue(resourceKeyVal);
                cell = row.createCell(3);
                int policyType=policy.getPolicyType();
                List<RangerPolicyItem> policyItems=new 
ArrayList<RangerPolicyItem>();
@@ -3165,18 +3539,18 @@ public class ServiceDBStore extends 
AbstractServiceStore {
 
                List<String> groups = new ArrayList<String>();
                List<String> users = new ArrayList<String>();
-               String groupNames = "";
-               String userNames = "";
-               String accessType = "";
+
                if (!CollectionUtils.isEmpty(policyItems)) {
                        for (RangerPolicyItem policyItem : policyItems) {
+                               groupNames = "";
+                               userNames = "";
+                               accessType = "";
                                groups = policyItem.getGroups();
                                List<RangerPolicyItemAccess> accesses = 
policyItem.getAccesses();
-                               accessType = accessType + "[";
                                for (RangerPolicyItemAccess access : accesses) {
-                                       accessType = accessType + 
access.getType() + " ";
+                                       accessType = accessType + 
access.getType() + " ,";
                                }
-                               accessType = accessType + "] ";
+                               accessType = 
accessType.substring(0,accessType.lastIndexOf(","));
                                if (!groups.isEmpty()) {
                                        groupNames = groupNames + 
groups.toString();
                                }
@@ -3190,6 +3564,8 @@ public class ServiceDBStore extends AbstractServiceStore {
                cell = row.createCell(4);
                cell.setCellValue(userNames);
                cell = row.createCell(5);
+               cell.setCellValue(accessType.trim());
+               cell = row.createCell(6);
                XXService xxservice = 
daoMgr.getXXService().findByName(policy.getService());
                String ServiceType = "";
                if (xxservice != null) {
@@ -3200,25 +3576,16 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                        }
                }
                cell.setCellValue(ServiceType);
-               cell = row.createCell(6);
-               cell.setCellValue(accessType.trim());
                cell = row.createCell(7);
-               String resValue = "";
-               String resourceKeyVal = "";
-               String resKey = "";
-               Map<String, RangerPolicyResource> resources = 
policy.getResources();
-               if (resources!=null) {
-                       for (Entry<String, RangerPolicyResource> resource : 
resources.entrySet()) {
-                               resKey = resource.getKey();
-                               RangerPolicyResource policyResource = 
resource.getValue();
-                               List<String> resvalueList = 
policyResource.getValues();
-                               resValue = resvalueList.toString();
-                               resourceKeyVal = resourceKeyVal + " " + resKey 
+ "=" + resValue;
-                       }
+               if (policy.getIsEnabled()) {
+                       policyStatus = "Enabled";
+               } else {
+                       policyStatus = "Disabled";
                }
-               cell.setCellValue(resourceKeyVal);
+               cell.setCellValue(policyStatus);
        }
 
+
        private void createHeaderRow(Sheet sheet) {
                CellStyle cellStyle = sheet.getWorkbook().createCellStyle();
                Font font = sheet.getWorkbook().createFont();
@@ -3236,9 +3603,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                cellNAME.setCellStyle(cellStyle);
                cellNAME.setCellValue("Name");
 
-               Cell cellStatus = row.createCell(2);
-               cellStatus.setCellStyle(cellStyle);
-               cellStatus.setCellValue("Status");
+               Cell cellResources = row.createCell(2);
+               cellResources.setCellStyle(cellStyle);
+               cellResources.setCellValue("Resources");
 
                Cell cellGroups = row.createCell(3);
                cellGroups.setCellStyle(cellStyle);
@@ -3248,16 +3615,16 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                cellUsers.setCellStyle(cellStyle);
                cellUsers.setCellValue("Users");
 
-               Cell cellServiceType = row.createCell(5);
-               cellServiceType.setCellStyle(cellStyle);
-               cellServiceType.setCellValue("Service Type");
-
-               Cell cellAccesses = row.createCell(6);
+               Cell cellAccesses = row.createCell(5);
                cellAccesses.setCellStyle(cellStyle);
                cellAccesses.setCellValue("Accesses");
 
-               Cell cellResources = row.createCell(7);
-               cellResources.setCellStyle(cellStyle);
-               cellResources.setCellValue("Resources");
+               Cell cellServiceType = row.createCell(6);
+               cellServiceType.setCellStyle(cellStyle);
+               cellServiceType.setCellValue("Service Type");
+
+               Cell cellStatus = row.createCell(7);
+               cellStatus.setCellStyle(cellStyle);
+               cellStatus.setCellValue("Status");
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7d452069/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index 19a1509..052254d 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -19,6 +19,7 @@
 
 package org.apache.ranger.rest;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -1526,6 +1527,41 @@ public class ServiceREST {
 
        }
 
+       @GET
+       @Path("/policies/csv")
+       @Produces("text/csv")
+       public void getPoliciesInCsv(@Context HttpServletRequest request, 
@Context HttpServletResponse response) throws IOException {
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> ServiceREST.getPoliciesInCsv()");
+               }
+               RangerPerfTracer perf = null;
+
+               SearchFilter filter = searchUtil.getSearchFilter(request, 
policyService.sortFields);
+
+               try {
+                       if (RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+                               perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"ServiceREST.getPoliciesInCsv()");
+                       }
+                       List<RangerPolicy> policies = new 
ArrayList<RangerPolicy>();
+                       if (filter != null) {
+                               filter.setStartIndex(0);
+                               filter.setMaxRows(Integer.MAX_VALUE);
+                               policies = 
svcStore.getPoliciesForReports(filter);
+                       }
+                       svcStore.getPoliciesInCSV(policies, response);
+
+               } catch (WebApplicationException excp) {
+                       throw excp;
+               } catch (Throwable excp) {
+                       LOG.error("Error while downloading policy report", 
excp);
+
+                       throw 
restErrorUtil.createRESTException(excp.getMessage());
+               } finally {
+                       RangerPerfTracer.log(perf);
+               }
+       }
+
 
        public List<RangerPolicy> getPolicies(SearchFilter filter) {
                if(LOG.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7d452069/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js 
b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
index c3acf6b..4c02504 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
@@ -76,7 +76,6 @@ define(function(require) {'use strict';
                        btnShowLessUsers        : '[data-id="showLessUsers"]',
                        componentType       : '[data-id="component"]',
                        downloadReport      : '[data-id="downloadReport"]',
-                       downloadBtn         : '[data-js="downloadBtn"]',
                        policyType          : '[data-id="policyType"]'
                },
 
@@ -90,7 +89,7 @@ define(function(require) {'use strict';
                        events['click ' + this.ui.btnShowLess]  = 'onShowLess';
                        events['click ' + this.ui.btnShowMoreUsers]  = 
'onShowMoreUsers';
                        events['click ' + this.ui.btnShowLessUsers]  = 
'onShowLessUsers';
-                       events['click ' + this.ui.downloadBtn] = 'onDownload';
+                       events['click .downloadFormat'] = 
'setDownloadFormatFilter';
                        return events;
                },
 
@@ -103,7 +102,7 @@ define(function(require) {'use strict';
                        _.extend(this, _.pick(options, 'groupList','userList'));
                        this.bindEvents();
                        this.previousSearchUrl = '';
-                       this.searchedFlag = true;
+                       this.searchedFlag = false;
                        this.allowDownload = false;
                },
                initializeRequiredData : function() {
@@ -206,18 +205,51 @@ define(function(require) {'use strict';
                                        editable: false,
                                        sortable : false
                                },
-                               isEnabled:{
-                                       label:localization.tt('lbl.status'),
-                                       cell :"html",
-                                       editable:false,
+                               resources:
+                               {
+                                       label: 'Resources',
+                                       cell: 'Html',
                                        formatter: _.extend({}, 
Backgrid.CellFormatter.prototype, {
-                                               fromRaw: function (rawValue) {
-                                                       return rawValue ? 
'<label class="label label-success">Enabled</label>' : '<label class="label 
label-important">Disabled</label>';
+                                               fromRaw: function 
(rawValue,model) {
+                                                       var strVal = '', names 
= '';
+                                                       var resource = 
model.get('resources');
+                                                       
_.each(resource,function(resourceObj,key){
+                                                               strVal += 
"<b>"+key+":</b>";
+                                                               strVal += 
"<span title='";
+                                                               names = '';
+                                                               
_.map(resourceObj.values,function(resourceVal){
+                                                                       names 
+= resourceVal+",";
+                                                               });
+                                                               names = 
names.slice(0,-1);
+                                                               strVal += names 
+ "'>"+names +"</span>";
+                                                               strVal = 
strVal+ "<br />";
+                                                       });
+                                                       return strVal;
+                                                       }
+                                       }),
+                                       editable: false,
+                                       sortable: false,
+                                       click: false
+                               },
+                               policyType: {
+                                       label: 'Policy Type',
+                                       cell: 
Backgrid.HtmlCell.extend({className: 'cellWidth-1', className: 'html-cell'}),
+                                       formatter: _.extend({}, 
Backgrid.CellFormatter.prototype,{
+                                               fromRaw: 
function(rawValue,model){
+                                                       var policyType = 
model.get("policyType");
+                                                       var startLbl = '<label 
class="label label-ranger" style="float:inherit;">';
+                                                       if 
(XAUtil.isMaskingPolicy(policyType)) {
+                                                               return startLbl 
+ XAEnums.RangerPolicyType.RANGER_MASKING_POLICY_TYPE.label + '</label>';
+                                                       } else if 
(XAUtil.isRowFilterPolicy(policyType)) {
+                                                               return startLbl 
+ XAEnums.RangerPolicyType.RANGER_ROW_FILTER_POLICY_TYPE.label + '</label>';
+                                                       }else{// by default it 
is access
+                                                               return startLbl 
+ XAEnums.RangerPolicyType.RANGER_ACCESS_POLICY_TYPE.label + '</label>';
+                                                       }
                                                }
                                        }),
-                                       click : false,
-                                       drag : false,
-                                       sortable : false
+                                       editable: false,
+                                       sortable: false,
+                                       click: false
                                },
                                permissions: {
                                        label: 'Permissions',
@@ -254,9 +286,9 @@ define(function(require) {'use strict';
                                                                                
});
                                                                                
                                                                        }
-                                                                       htmlStr 
+= '<tr style="height:60px"><td style ="width:80px">'+grpStr+'</td>\
-                                                                               
                <td style="width:80px">'+(userStr)+'</td>\
-                                                                               
                <td style="width:150px">'+accessStr+'</td></tr>';
+                                                                       htmlStr 
+= '<tr style="height:60px"><td class="report-user-group">'+grpStr+'</td>\
+                                                                               
                <td class="report-user-group">'+(userStr)+'</td>\
+                                                                               
                <td class="report-access">'+accessStr+'</td></tr>';
                                                                        
accessStr = '', grpStr = '', userStr = '';
                                                                });
                                                                return htmlStr;
@@ -269,32 +301,20 @@ define(function(require) {'use strict';
                                        sortable: false,
                                        click: false
                                },
-                               resources:
-                               {
-                                       label: 'Resources',
-                                       cell: 'Html',
+                               isEnabled:{
+                                       label:localization.tt('lbl.status'),
+                                       cell :"html",
+                                       editable:false,
                                        formatter: _.extend({}, 
Backgrid.CellFormatter.prototype, {
-                                               fromRaw: function 
(rawValue,model) {
-                                                       var strVal = '', names 
= '';
-                                                       var resource = 
model.get('resources');
-                                                       
_.each(resource,function(resourceObj,key){
-                                                               strVal += 
"<b>"+key+":</b>";
-                                                               strVal += 
"<span title='";
-                                                               names = '';
-                                                               
_.map(resourceObj.values,function(resourceVal){
-                                                                       names 
+= resourceVal+",";
-                                                               });
-                                                               names = 
names.slice(0,-1);
-                                                               strVal += names 
+ "'>"+names +"</span>";
-                                                               strVal = 
strVal+ "<br />";
-                                                       });
-                                                       return strVal;
-                                                       }
+                                               fromRaw: function (rawValue) {
+                                                       return rawValue ? 
'<label class="label label-success" style="float:inherit;">Enabled</label>' : 
'<label class="label label-important" style="float:inherit;">Disabled</label>';
+                                               }
                                        }),
-                                       editable: false,
-                                       sortable: false,
-                                       click: false
+                                       click : false,
+                                       drag : false,
+                                       sortable : false
                                }
+
                        };
 
                        return coll.constructor.getTableCols(cols, coll);
@@ -327,7 +347,7 @@ define(function(require) {'use strict';
        },
        modifyTableForSubcolumns : function(){
                this.$el.find(".permissions").html('<tr><th 
colspan="3">Permissions</th></tr>\
-                                                       <tr><th 
style="width:80px">Groups</th><th style="width:80px">Users</th>\
+                                                       <tr><th 
style="width:80px;max-width:80px;">Groups</th><th 
style="width:80px;max-width:80px;">Users</th>\
                                                        <th 
style="width:150px">Accesses</th></tr>');
        },
        onDownload: function(e){
@@ -338,14 +358,28 @@ define(function(require) {'use strict';
                        });
                        return;
                }
-               if(this.searchedFlag) {
+               if(!this.searchedFlag) {
                        url =  this.previousSearchUrl;
+               } else if (this.searchedFlag && this.updatedUrl) {
+                       var urlString = XAUtil.getBaseUrl();
+                       if(urlString.slice(-1) === "/") {
+                               urlString = urlString.slice(0,-1);
+                       }
+                       url = url + urlString;
+                       if (e === "xlsFormat") {
+                                       url = url + 
'/service/plugins/policies/downloadExcel?';
+                       } else {
+                                       url = url + 
'/service/plugins/policies/csv?';
+                       }
+                       url = url + this.searchedParamsString + 
this.searchedComponentString;
+                       this.previousSearchUrl = url;
+                       this.searchedFlag = true;
                }
                this.ui.downloadReport.attr("href",url)[0].click();
-
        },
-       getDownloadExcelUrl: function(that,component,params){
-               var compString = '', url = 
'/service/plugins/policies/downloadExcel?';
+       setDownloadReportUrl: function(that,component,params){
+
+               var compString = '', url = '';
                if(!_.isUndefined(component)) {
                        _.each(component,function(comp){
                                compString = compString + comp + '_';
@@ -360,11 +394,10 @@ define(function(require) {'use strict';
                        }
                });
                var str = jQuery.param( params );
-               url = url + str;
-               if(!_.isEmpty(compString)) {
-                       url = url + "&serviceType=" + compString;
-               }
-               return url;
+               this.searchedComponentString = "&serviceType=" + compString;
+               this.searchedParamsString = str;
+               this.updatedUrl = true;
+
        },
                /** on render callback */
                setupGroupAutoComplete : function(){
@@ -567,11 +600,8 @@ define(function(require) {'use strict';
                                policyNamePartial : policyName,
                                policyType: policyType
                        };
-                       if(urlString.slice(-1) == "/") {
-                               urlString = urlString.slice(0,-1);
-                       }
-                       url = urlString + this.getDownloadExcelUrl(this, 
component,     params);
-                       this.previousSearchUrl = url;
+
+                       this.setDownloadReportUrl(this,component,params);
                        this.searchedFlag = true;
         },
                autocompleteFilter      : function(e){
@@ -591,6 +621,28 @@ define(function(require) {'use strict';
                                $button.text('Username');
                        }
                },
+               setDownloadFormatFilter : function(e){
+                       var that = this;
+                       var el = $(e.currentTarget);
+                       if(el.data('id') === "xlsFormat") {
+                               if(!that.searchedFlag) {
+                                       var urlString = XAUtil.getBaseUrl();
+                                       if(urlString.slice(-1) === "/") {
+                                               urlString = 
urlString.slice(0,-1);
+                                       }
+                               }
+                               this.previousSearchUrl = urlString + 
"/service/plugins/policies/downloadExcel?";
+                       } else {
+                               if(!that.searchedFlag) {
+                                       var urlString = XAUtil.getBaseUrl();
+                                       if(urlString.slice(-1) === "/") {
+                                               urlString = 
urlString.slice(0,-1);
+                                       }
+                                       this.previousSearchUrl = urlString + 
"/service/plugins/policies/csv?";
+                               }
+                       }
+                       this.onDownload(el.data('id'));
+               },
                gotoTable : function(e){
                        var that = this, elem = $(e.currentTarget),pos;
                        var scroll = false;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7d452069/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js 
b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
index ecd97e8..a766705 100644
--- a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
@@ -63,8 +63,6 @@ define(function(require){
                btnSave         : '[data-id="save"]',
                btnShowHide             : '[data-action="showHide"]',
                        visibilityDropdown              : 
'[data-id="visibilityDropdown"]',
-                       activeStatusDropdown            : 
'[data-id="activeStatusDropdown"]',
-                       activeStatusDiv         :'[data-id="activeStatusDiv"]',
                        addNewBtnDiv    : '[data-id="addNewBtnDiv"]',
                        deleteUser: '[data-id="deleteUserGroup"]'
        },
@@ -77,7 +75,6 @@ define(function(require){
                        events['click ' + this.ui.btnShowLess]  = 'onShowLess';
                        events['click ' + this.ui.btnSave]  = 'onSave';
                        events['click ' + this.ui.visibilityDropdown +' li a']  
= 'onVisibilityChange';
-                       events['click ' + this.ui.activeStatusDropdown +' li 
a']  = 'onStatusChange';
                        events['click ' + this.ui.deleteUser] = 'onDeleteUser';
                        return events;
                },
@@ -168,38 +165,6 @@ define(function(require){
                 });
                        }
                },
-               onStatusChange : function(e){
-                       var that = this;
-                       var status = $(e.currentTarget).attr('data-id') == 
'Enable' ? true : false;
-                       var updateMap = {};
-                       var collection = this.showUsers ? this.collection : 
this.groupList;
-
-                       _.each(collection.selected, function(s){
-                               if( s.get('status') != status ){
-                                       s.set('status', status);
-                                       s.toServerStatus();
-                                       updateMap[s.get('id')] = 
s.get('status');
-                               }
-                       });
-
-                       var clearCache = function(coll){
-                _.each(Backbone.fetchCache._cache, function(url, val){
-                   var urlStr = coll.url;
-                   if((val.indexOf(urlStr) != -1)){
-                       Backbone.fetchCache.clearItem(val);
-                   }
-                });
-                coll.fetch({reset: true, cache : false});
-                       }
-                       if(this.showUsers){
-                               collection.setStatus(updateMap, {
-                                       success : function(){
-                                               that.chgFlags = [];
-                                               clearCache(collection);
-                                       }
-                               });
-                       }
-               },
                renderUserTab : function(){
                        var that = this;
                        if(_.isUndefined(this.collection)){
@@ -217,7 +182,6 @@ define(function(require){
                                if(!_.isString(that.ui.addNewGroup)){
                                        that.ui.addNewGroup.hide();
                                        that.ui.addNewUser.show();
-                                       that.ui.activeStatusDiv.show();
                                }
                                that.$('.wrap-header').text('User List');
                                that.checkRoleKeyAdmin();
@@ -237,7 +201,6 @@ define(function(require){
                        }).done(function(){
                                that.ui.addNewUser.hide();
                                that.ui.addNewGroup.show();
-                               that.ui.activeStatusDiv.hide();
                                that.$('.wrap-header').text('Group List');
                                
that.$('ul').find('[data-js="groups"]').addClass('active');
                                
that.$('ul').find('[data-js="users"]').removeClass();
@@ -364,25 +327,7 @@ define(function(require){
                                        }),
                                        editable:false,
                                        sortable:false
-                               },
-                               status : {
-                                       label   : localization.tt("lbl.status"),
-                                       cell    : 
Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
-                                       formatter: _.extend({}, 
Backgrid.CellFormatter.prototype, {
-                                               fromRaw: function (rawValue, 
model) {
-                                                       
if(!_.isUndefined(rawValue)){
-                                                               if(rawValue)
-                                                                       return 
'<span class="label 
label-success">'+XAEnums.ActiveStatus.STATUS_ENABLED.label+'</span>';
-                                                               else
-                                                                       return 
'<span class="label 
label-green">'+XAEnums.ActiveStatus.STATUS_DISABLED.label+'</span>';
-                                                       }else
-                                                               return '--';
-                                               }
-                                       }),
-                                       editable:false,
-                                       sortable:false
-                               },
-                               
+                               }
                        };
                        return this.collection.constructor.getTableCols(cols, 
this.collection);
                },

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7d452069/security-admin/src/main/webapp/styles/xa.css
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/styles/xa.css 
b/security-admin/src/main/webapp/styles/xa.css
index b586e11..a451761 100644
--- a/security-admin/src/main/webapp/styles/xa.css
+++ b/security-admin/src/main/webapp/styles/xa.css
@@ -1915,10 +1915,6 @@ input[type="radio"], input[type="checkbox"] {margin-top: 
0;}
     margin-top: -2px;
     font-size: 11px;
 }
-.backgrid > tbody > tr > td:nth-child(5) {
-  text-align: left !important;
-  width: 200px
-}
 .control-label-align {
        width: 80px !important;
 }
@@ -1944,3 +1940,48 @@ input[type="radio"], input[type="checkbox"] {margin-top: 
0;}
 .permissionItemSortable > tr:hover > td:first-child:after {
   border-color: rgba(0,0,0,0.5);
 }
+.download-list {
+  min-width: 100px;
+  max-width: 120px;
+}
+.hdfs-table table.backgrid thead th:nth-child(1){
+  width: 60px;
+  max-width: 60px
+}
+.hdfs-table table.backgrid thead th:nth-child(2) {
+  /*width: 300px;*/
+  width: 25%;
+}
+.hdfs-table table.backgrid thead th:nth-child(3){
+  width:200px;
+}
+.hdfs-table table.backgrid thead th:nth-child(4){
+  width:100px;
+}
+.hdfs-table table.backgrid tbody td:nth-child(4){
+  width:100px;
+  text-align: center;
+}
+.hdfs-table table.backgrid tbody tr td:nth-child(3){
+ text-align: left !important;
+ max-width: 200px;
+}
+.hdfs-table table.backgrid tbody tr td:nth-child(6){
+  text-align: center;
+  width: 100px
+}
+.hdfs-table table.backgrid thead th:nth-child(6){
+  text-align: center;
+  width: 100px;
+}
+.hdfs-table table.backgrid thead th:nth-child(5) tr{
+  border-left-style: hidden;
+}
+.report-access{
+  width:100%;
+  border-right:1px solid #DDD;
+}
+.report-user-group{
+  width:80px;
+  min-width:80px;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7d452069/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html 
b/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
index 48741ce..df7acfb 100644
--- 
a/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
+++ 
b/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
@@ -96,10 +96,18 @@
        </div>
        <div class="row-fluid">
        <span>
-               <button type="button" class="btn btn-primary btn-small 
btn-right" data-js="downloadBtn" title="Download all below policies" 
name="downloadPolicy">
-                                                               <i 
class="icon-download-alt"></i>
-                                                                               
Download
+               <div class="btn-group btn-right">
+                       <button type="button" data-name="downloadFormatBtn" 
class="btn btn-primary dropdown-toggle" title="Download all below policies" 
data-toggle="dropdown">
+                               <i class="icon-download-alt"></i>
+                               <span>Download</span>
+                               <span class="caret"> </span>
                        </button>
+                       <ul class="dropdown-menu download-list">
+                               <li><a data-id="xlsFormat" 
class="downloadFormat" href="javascript:void(0)">Excel file</a></li>
+                               <li role="separator" class="divider"></li>
+                               <li><a data-id="csvFormat" 
class="downloadFormat" href="javascript:void(0)">CSV file</a></li>
+                       </ul>
+               </div>
        </span>
        <a href="javascript:void(0)" data-id="downloadReport"></a>
         </div>

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7d452069/security-admin/src/main/webapp/templates/users/UserTableLayout_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/users/UserTableLayout_tmpl.html 
b/security-admin/src/main/webapp/templates/users/UserTableLayout_tmpl.html
index f7c90f3..b7d4967 100644
--- a/security-admin/src/main/webapp/templates/users/UserTableLayout_tmpl.html
+++ b/security-admin/src/main/webapp/templates/users/UserTableLayout_tmpl.html
@@ -33,8 +33,6 @@
                        {{#isSystemAdmin .}}
                                <a href="javascript:void(0);" 
data-id="deleteUserGroup" title="Permanently delete selected users/groups" 
class="btn btn-primary btn-right btn-danger"><i class="icon-trash icon-large" 
/></a>
                        {{/isSystemAdmin}}
-                       <a href="#!/user/create" class="btn btn-primary 
btn-right" type="button" data-id="addNewUser"> {{tt 'lbl.addNewUser'}} </a>
-                       <a href="#!/group/create" class="btn btn-primary 
btn-right" type="button" data-id="addNewGroup" style="display:none;"> {{tt 
'lbl.addNewGroup'}} </a>
       <div class="btn-group btn-right">
         <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" 
href="#">
           {{tt 'btn.setVisibility'}}
@@ -45,16 +43,8 @@
           <li><a href="javascript:void(0);" data-id="hidden">{{tt 
'lbl.VisibilityStatus_IS_HIDDEN'}}</a></li>
         </ul>
       </div>
-      <div class="btn-group btn-right" data-id="activeStatusDiv">
-        <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" 
href="#">
-          {{tt 'btn.setStatus'}}
-          <span class="caret"></span>
-        </a>
-        <ul class="dropdown-menu" data-id="activeStatusDropdown">
-          <li><a href="javascript:void(0);" data-id="Enable">{{tt 
'lbl.ActiveStatus_STATUS_ENABLED'}}</a></li>
-          <li><a href="javascript:void(0);" data-id="Disable">{{tt 
'lbl.ActiveStatus_STATUS_DISABLED'}}</a></li>
-        </ul>
-      </div>
+      <a href="#!/user/create" class="btn btn-primary btn-right" type="button" 
data-id="addNewUser"> {{tt 'lbl.addNewUser'}} </a>
+      <a href="#!/group/create" class="btn btn-primary btn-right" 
type="button" data-id="addNewGroup" style="display:none;"> {{tt 
'lbl.addNewGroup'}} </a>
                </div>
                <div data-id="r_tableList" class="clickable">
           <b class="_prevNav"></b>


Reply via email to