001
014
015 package com.liferay.portal.model;
016
017 import com.liferay.portal.kernel.util.Digester;
018 import com.liferay.portal.kernel.util.DigesterUtil;
019
020 import java.nio.ByteBuffer;
021
022 import java.util.Map;
023 import java.util.Set;
024 import java.util.SortedMap;
025 import java.util.TreeMap;
026
027
033 public class ResourceBlockPermissionsContainer {
034
035 public void addPermission(long roleId, long actionIdsLong) {
036 actionIdsLong |= getActionIds(roleId);
037
038 setPermissions(roleId, actionIdsLong);
039 }
040
041 public long getActionIds(long roleId) {
042 Long actionIdsLong = _permissions.get(roleId);
043
044 if (actionIdsLong == null) {
045 actionIdsLong = 0L;
046 }
047
048 return actionIdsLong;
049 }
050
051 public SortedMap<Long, Long> getPermissions() {
052 return _permissions;
053 }
054
055
062 public String getPermissionsHash() {
063
064
065
066
067 ByteBuffer byteBuffer = ByteBuffer.allocate(_permissions.size() * 16);
068
069 for (Map.Entry<Long, Long> entry : _permissions.entrySet()) {
070 byteBuffer.putLong(entry.getKey());
071 byteBuffer.putLong(entry.getValue());
072 }
073
074 byteBuffer.flip();
075
076 return DigesterUtil.digestHex(Digester.SHA_1, byteBuffer);
077 }
078
079 public Set<Long> getRoleIds() {
080 return _permissions.keySet();
081 }
082
083 public boolean hasPermission(long roleId, long actionIdsLong) {
084 if ((getActionIds(roleId) & actionIdsLong) == actionIdsLong) {
085 return true;
086 }
087
088 return false;
089 }
090
091 public void removePermission(long roleId, long actionIdsLong) {
092 actionIdsLong = getActionIds(roleId) & (~actionIdsLong);
093
094 setPermissions(roleId, actionIdsLong);
095 }
096
097 public void setPermissions(long roleId, long actionIdsLong) {
098 if (actionIdsLong == 0) {
099 _permissions.remove(roleId);
100 }
101 else {
102 _permissions.put(roleId, actionIdsLong);
103 }
104 }
105
106 private final SortedMap<Long, Long> _permissions = new TreeMap<>();
107
108 }