blob: 03e5dc886d17628cc44c456ab1a31c7a7ebfe660 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">package org.apache.archiva.redback.rbac.ldap;</a>
<span class="sourceLineNo">002</span><a id="line.2"></a>
<span class="sourceLineNo">003</span><a id="line.3">/*</a>
<span class="sourceLineNo">004</span><a id="line.4"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">005</span><a id="line.5"> * or more contributor license agreements. See the NOTICE file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * distributed with this work for additional information</a>
<span class="sourceLineNo">007</span><a id="line.7"> * regarding copyright ownership. The ASF licenses this file</a>
<span class="sourceLineNo">008</span><a id="line.8"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">009</span><a id="line.9"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">010</span><a id="line.10"> * with the License. You may obtain a copy of the License at</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">013</span><a id="line.13"> *</a>
<span class="sourceLineNo">014</span><a id="line.14"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">015</span><a id="line.15"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">016</span><a id="line.16"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">017</span><a id="line.17"> * KIND, either express or implied. See the License for the</a>
<span class="sourceLineNo">018</span><a id="line.18"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">019</span><a id="line.19"> * under the License.</a>
<span class="sourceLineNo">020</span><a id="line.20"> */</a>
<span class="sourceLineNo">021</span><a id="line.21"></a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.archiva.redback.common.ldap.MappingException;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.archiva.redback.common.ldap.connection.LdapConnection;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.archiva.redback.common.ldap.connection.LdapConnectionFactory;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.archiva.redback.common.ldap.connection.LdapException;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.apache.archiva.redback.common.ldap.role.LdapRoleMapper;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.apache.archiva.redback.common.ldap.role.LdapRoleMapperConfiguration;</a>
<span class="sourceLineNo">028</span><a id="line.28">import org.apache.archiva.components.cache.Cache;</a>
<span class="sourceLineNo">029</span><a id="line.29">import org.apache.archiva.redback.configuration.UserConfiguration;</a>
<span class="sourceLineNo">030</span><a id="line.30">import org.apache.archiva.redback.configuration.UserConfigurationKeys;</a>
<span class="sourceLineNo">031</span><a id="line.31">import org.apache.archiva.redback.rbac.AbstractRBACManager;</a>
<span class="sourceLineNo">032</span><a id="line.32">import org.apache.archiva.redback.rbac.AbstractRole;</a>
<span class="sourceLineNo">033</span><a id="line.33">import org.apache.archiva.redback.rbac.Operation;</a>
<span class="sourceLineNo">034</span><a id="line.34">import org.apache.archiva.redback.rbac.Permission;</a>
<span class="sourceLineNo">035</span><a id="line.35">import org.apache.archiva.redback.rbac.RBACManager;</a>
<span class="sourceLineNo">036</span><a id="line.36">import org.apache.archiva.redback.rbac.RBACManagerListener;</a>
<span class="sourceLineNo">037</span><a id="line.37">import org.apache.archiva.redback.rbac.RBACObjectAssertions;</a>
<span class="sourceLineNo">038</span><a id="line.38">import org.apache.archiva.redback.rbac.RbacManagerException;</a>
<span class="sourceLineNo">039</span><a id="line.39">import org.apache.archiva.redback.rbac.RbacObjectInvalidException;</a>
<span class="sourceLineNo">040</span><a id="line.40">import org.apache.archiva.redback.rbac.RbacObjectNotFoundException;</a>
<span class="sourceLineNo">041</span><a id="line.41">import org.apache.archiva.redback.rbac.RbacPermanentException;</a>
<span class="sourceLineNo">042</span><a id="line.42">import org.apache.archiva.redback.rbac.Resource;</a>
<span class="sourceLineNo">043</span><a id="line.43">import org.apache.archiva.redback.rbac.Role;</a>
<span class="sourceLineNo">044</span><a id="line.44">import org.apache.archiva.redback.rbac.UserAssignment;</a>
<span class="sourceLineNo">045</span><a id="line.45">import org.apache.archiva.redback.users.User;</a>
<span class="sourceLineNo">046</span><a id="line.46">import org.apache.archiva.redback.users.UserManager;</a>
<span class="sourceLineNo">047</span><a id="line.47">import org.apache.archiva.redback.users.UserManagerException;</a>
<span class="sourceLineNo">048</span><a id="line.48">import org.apache.archiva.redback.users.ldap.ctl.LdapController;</a>
<span class="sourceLineNo">049</span><a id="line.49">import org.apache.archiva.redback.users.ldap.ctl.LdapControllerException;</a>
<span class="sourceLineNo">050</span><a id="line.50">import org.apache.commons.lang3.StringUtils;</a>
<span class="sourceLineNo">051</span><a id="line.51">import org.slf4j.Logger;</a>
<span class="sourceLineNo">052</span><a id="line.52">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">053</span><a id="line.53">import org.springframework.stereotype.Service;</a>
<span class="sourceLineNo">054</span><a id="line.54"></a>
<span class="sourceLineNo">055</span><a id="line.55">import javax.annotation.PostConstruct;</a>
<span class="sourceLineNo">056</span><a id="line.56">import javax.inject.Inject;</a>
<span class="sourceLineNo">057</span><a id="line.57">import javax.inject.Named;</a>
<span class="sourceLineNo">058</span><a id="line.58">import javax.naming.NamingException;</a>
<span class="sourceLineNo">059</span><a id="line.59">import javax.naming.directory.DirContext;</a>
<span class="sourceLineNo">060</span><a id="line.60">import java.util.ArrayList;</a>
<span class="sourceLineNo">061</span><a id="line.61">import java.util.Collection;</a>
<span class="sourceLineNo">062</span><a id="line.62">import java.util.Collections;</a>
<span class="sourceLineNo">063</span><a id="line.63">import java.util.List;</a>
<span class="sourceLineNo">064</span><a id="line.64">import java.util.Map;</a>
<span class="sourceLineNo">065</span><a id="line.65">import java.util.Optional;</a>
<span class="sourceLineNo">066</span><a id="line.66">import java.util.Set;</a>
<span class="sourceLineNo">067</span><a id="line.67">import java.util.stream.Collectors;</a>
<span class="sourceLineNo">068</span><a id="line.68">import java.util.stream.Stream;</a>
<span class="sourceLineNo">069</span><a id="line.69"></a>
<span class="sourceLineNo">070</span><a id="line.70">/**</a>
<span class="sourceLineNo">071</span><a id="line.71"> * LdapRbacManager will read datas from ldap for mapping groups to role.</a>
<span class="sourceLineNo">072</span><a id="line.72"> * Write operations will delegate to cached implementation.</a>
<span class="sourceLineNo">073</span><a id="line.73"> *</a>
<span class="sourceLineNo">074</span><a id="line.74"> * @author Olivier Lamy</a>
<span class="sourceLineNo">075</span><a id="line.75"> */</a>
<span class="sourceLineNo">076</span><a id="line.76">@Service("rbacManager#ldap")</a>
<span class="sourceLineNo">077</span><a id="line.77">public class LdapRbacManager</a>
<span class="sourceLineNo">078</span><a id="line.78"> extends AbstractRBACManager</a>
<span class="sourceLineNo">079</span><a id="line.79"> implements RBACManager, RBACManagerListener</a>
<span class="sourceLineNo">080</span><a id="line.80">{</a>
<span class="sourceLineNo">081</span><a id="line.81"></a>
<span class="sourceLineNo">082</span><a id="line.82"> private Logger log = LoggerFactory.getLogger( getClass() );</a>
<span class="sourceLineNo">083</span><a id="line.83"></a>
<span class="sourceLineNo">084</span><a id="line.84"> @Inject</a>
<span class="sourceLineNo">085</span><a id="line.85"> @Named(value = "rbacManager#cached")</a>
<span class="sourceLineNo">086</span><a id="line.86"> private RBACManager rbacImpl;</a>
<span class="sourceLineNo">087</span><a id="line.87"></a>
<span class="sourceLineNo">088</span><a id="line.88"> @Inject</a>
<span class="sourceLineNo">089</span><a id="line.89"> @Named(value = "ldapRoleMapper#default")</a>
<span class="sourceLineNo">090</span><a id="line.90"> private LdapRoleMapper ldapRoleMapper;</a>
<span class="sourceLineNo">091</span><a id="line.91"></a>
<span class="sourceLineNo">092</span><a id="line.92"> @Inject</a>
<span class="sourceLineNo">093</span><a id="line.93"> @Named(value = "userConfiguration#default")</a>
<span class="sourceLineNo">094</span><a id="line.94"> private UserConfiguration userConf;</a>
<span class="sourceLineNo">095</span><a id="line.95"></a>
<span class="sourceLineNo">096</span><a id="line.96"> @Inject</a>
<span class="sourceLineNo">097</span><a id="line.97"> @Named(value = "userManager#ldap")</a>
<span class="sourceLineNo">098</span><a id="line.98"> private UserManager userManager;</a>
<span class="sourceLineNo">099</span><a id="line.99"></a>
<span class="sourceLineNo">100</span><a id="line.100"> @Inject</a>
<span class="sourceLineNo">101</span><a id="line.101"> private LdapConnectionFactory ldapConnectionFactory;</a>
<span class="sourceLineNo">102</span><a id="line.102"></a>
<span class="sourceLineNo">103</span><a id="line.103"> @Inject</a>
<span class="sourceLineNo">104</span><a id="line.104"> private LdapController ldapController;</a>
<span class="sourceLineNo">105</span><a id="line.105"></a>
<span class="sourceLineNo">106</span><a id="line.106"> @Inject</a>
<span class="sourceLineNo">107</span><a id="line.107"> @Named(value = "ldapRoleMapperConfiguration#default")</a>
<span class="sourceLineNo">108</span><a id="line.108"> private LdapRoleMapperConfiguration ldapRoleMapperConfiguration;</a>
<span class="sourceLineNo">109</span><a id="line.109"></a>
<span class="sourceLineNo">110</span><a id="line.110"> @Inject</a>
<span class="sourceLineNo">111</span><a id="line.111"> @Named(value = "cache#ldapRoles")</a>
<span class="sourceLineNo">112</span><a id="line.112"> private Cache&lt;String, Role&gt; rolesCache;</a>
<span class="sourceLineNo">113</span><a id="line.113"></a>
<span class="sourceLineNo">114</span><a id="line.114"> @Inject</a>
<span class="sourceLineNo">115</span><a id="line.115"> @Named(value = "cache#userAssignments")</a>
<span class="sourceLineNo">116</span><a id="line.116"> private Cache&lt;String, UserAssignment&gt; userAssignmentsCache;</a>
<span class="sourceLineNo">117</span><a id="line.117"></a>
<span class="sourceLineNo">118</span><a id="line.118"> private boolean writableLdap = false;</a>
<span class="sourceLineNo">119</span><a id="line.119"></a>
<span class="sourceLineNo">120</span><a id="line.120"> @Override</a>
<span class="sourceLineNo">121</span><a id="line.121"> @PostConstruct</a>
<span class="sourceLineNo">122</span><a id="line.122"> public void initialize()</a>
<span class="sourceLineNo">123</span><a id="line.123"> {</a>
<span class="sourceLineNo">124</span><a id="line.124"> this.writableLdap = userConf.getBoolean( UserConfigurationKeys.LDAP_WRITABLE, this.writableLdap );</a>
<span class="sourceLineNo">125</span><a id="line.125"> }</a>
<span class="sourceLineNo">126</span><a id="line.126"></a>
<span class="sourceLineNo">127</span><a id="line.127"></a>
<span class="sourceLineNo">128</span><a id="line.128"> @Override</a>
<span class="sourceLineNo">129</span><a id="line.129"> public void addChildRole( Role role, Role childRole )</a>
<span class="sourceLineNo">130</span><a id="line.130"> throws RbacObjectInvalidException, RbacManagerException</a>
<span class="sourceLineNo">131</span><a id="line.131"> {</a>
<span class="sourceLineNo">132</span><a id="line.132"> this.rbacImpl.addChildRole( role, childRole );</a>
<span class="sourceLineNo">133</span><a id="line.133"> }</a>
<span class="sourceLineNo">134</span><a id="line.134"></a>
<span class="sourceLineNo">135</span><a id="line.135"> @Override</a>
<span class="sourceLineNo">136</span><a id="line.136"> public void addListener( RBACManagerListener listener )</a>
<span class="sourceLineNo">137</span><a id="line.137"> {</a>
<span class="sourceLineNo">138</span><a id="line.138"> super.addListener( listener );</a>
<span class="sourceLineNo">139</span><a id="line.139"> this.rbacImpl.addListener( listener );</a>
<span class="sourceLineNo">140</span><a id="line.140"> }</a>
<span class="sourceLineNo">141</span><a id="line.141"></a>
<span class="sourceLineNo">142</span><a id="line.142"> @Override</a>
<span class="sourceLineNo">143</span><a id="line.143"> public Operation createOperation( String name )</a>
<span class="sourceLineNo">144</span><a id="line.144"> throws RbacManagerException</a>
<span class="sourceLineNo">145</span><a id="line.145"> {</a>
<span class="sourceLineNo">146</span><a id="line.146"> return this.rbacImpl.createOperation( name );</a>
<span class="sourceLineNo">147</span><a id="line.147"> }</a>
<span class="sourceLineNo">148</span><a id="line.148"></a>
<span class="sourceLineNo">149</span><a id="line.149"> @Override</a>
<span class="sourceLineNo">150</span><a id="line.150"> public Permission createPermission( String name )</a>
<span class="sourceLineNo">151</span><a id="line.151"> throws RbacManagerException</a>
<span class="sourceLineNo">152</span><a id="line.152"> {</a>
<span class="sourceLineNo">153</span><a id="line.153"> return this.rbacImpl.createPermission( name );</a>
<span class="sourceLineNo">154</span><a id="line.154"> }</a>
<span class="sourceLineNo">155</span><a id="line.155"></a>
<span class="sourceLineNo">156</span><a id="line.156"> @Override</a>
<span class="sourceLineNo">157</span><a id="line.157"> public Permission createPermission( String name, String operationName, String resourceIdentifier )</a>
<span class="sourceLineNo">158</span><a id="line.158"> throws RbacManagerException</a>
<span class="sourceLineNo">159</span><a id="line.159"> {</a>
<span class="sourceLineNo">160</span><a id="line.160"> return this.rbacImpl.createPermission( name, operationName, resourceIdentifier );</a>
<span class="sourceLineNo">161</span><a id="line.161"> }</a>
<span class="sourceLineNo">162</span><a id="line.162"></a>
<span class="sourceLineNo">163</span><a id="line.163"> @Override</a>
<span class="sourceLineNo">164</span><a id="line.164"> public Resource createResource( String identifier )</a>
<span class="sourceLineNo">165</span><a id="line.165"> throws RbacManagerException</a>
<span class="sourceLineNo">166</span><a id="line.166"> {</a>
<span class="sourceLineNo">167</span><a id="line.167"> return this.rbacImpl.createResource( identifier );</a>
<span class="sourceLineNo">168</span><a id="line.168"> }</a>
<span class="sourceLineNo">169</span><a id="line.169"></a>
<span class="sourceLineNo">170</span><a id="line.170"> @Override</a>
<span class="sourceLineNo">171</span><a id="line.171"> public Role createRole( String id, String name )</a>
<span class="sourceLineNo">172</span><a id="line.172"> {</a>
<span class="sourceLineNo">173</span><a id="line.173"> return this.rbacImpl.createRole( id, name );</a>
<span class="sourceLineNo">174</span><a id="line.174"> }</a>
<span class="sourceLineNo">175</span><a id="line.175"></a>
<span class="sourceLineNo">176</span><a id="line.176"> @Override</a>
<span class="sourceLineNo">177</span><a id="line.177"> public UserAssignment createUserAssignment( String username )</a>
<span class="sourceLineNo">178</span><a id="line.178"> throws RbacManagerException</a>
<span class="sourceLineNo">179</span><a id="line.179"> {</a>
<span class="sourceLineNo">180</span><a id="line.180"> // TODO ldap cannot or isWritable ldap ?</a>
<span class="sourceLineNo">181</span><a id="line.181"> return this.rbacImpl.createUserAssignment( username );</a>
<span class="sourceLineNo">182</span><a id="line.182"> }</a>
<span class="sourceLineNo">183</span><a id="line.183"></a>
<span class="sourceLineNo">184</span><a id="line.184"> @Override</a>
<span class="sourceLineNo">185</span><a id="line.185"> public void eraseDatabase()</a>
<span class="sourceLineNo">186</span><a id="line.186"> {</a>
<span class="sourceLineNo">187</span><a id="line.187"> if ( writableLdap )</a>
<span class="sourceLineNo">188</span><a id="line.188"> {</a>
<span class="sourceLineNo">189</span><a id="line.189"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">190</span><a id="line.190"> DirContext context = null;</a>
<span class="sourceLineNo">191</span><a id="line.191"> try</a>
<span class="sourceLineNo">192</span><a id="line.192"> {</a>
<span class="sourceLineNo">193</span><a id="line.193"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">194</span><a id="line.194"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">195</span><a id="line.195"> ldapRoleMapper.removeAllRoles( context );</a>
<span class="sourceLineNo">196</span><a id="line.196"> }</a>
<span class="sourceLineNo">197</span><a id="line.197"> catch ( MappingException e )</a>
<span class="sourceLineNo">198</span><a id="line.198"> {</a>
<span class="sourceLineNo">199</span><a id="line.199"> log.warn( "skip error removing all roles {}", e.getMessage() );</a>
<span class="sourceLineNo">200</span><a id="line.200"> }</a>
<span class="sourceLineNo">201</span><a id="line.201"> catch ( LdapException e )</a>
<span class="sourceLineNo">202</span><a id="line.202"> {</a>
<span class="sourceLineNo">203</span><a id="line.203"> log.warn( "skip error removing all roles {}", e.getMessage() );</a>
<span class="sourceLineNo">204</span><a id="line.204"> }</a>
<span class="sourceLineNo">205</span><a id="line.205"> finally</a>
<span class="sourceLineNo">206</span><a id="line.206"> {</a>
<span class="sourceLineNo">207</span><a id="line.207"> closeContext( context );</a>
<span class="sourceLineNo">208</span><a id="line.208"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">209</span><a id="line.209"> }</a>
<span class="sourceLineNo">210</span><a id="line.210"> }</a>
<span class="sourceLineNo">211</span><a id="line.211"> this.rolesCache.clear();</a>
<span class="sourceLineNo">212</span><a id="line.212"> this.userAssignmentsCache.clear();</a>
<span class="sourceLineNo">213</span><a id="line.213"> this.rbacImpl.eraseDatabase();</a>
<span class="sourceLineNo">214</span><a id="line.214"> }</a>
<span class="sourceLineNo">215</span><a id="line.215"></a>
<span class="sourceLineNo">216</span><a id="line.216"> /**</a>
<span class="sourceLineNo">217</span><a id="line.217"> * @see org.apache.archiva.redback.rbac.RBACManager#getAllAssignableRoles()</a>
<span class="sourceLineNo">218</span><a id="line.218"> */</a>
<span class="sourceLineNo">219</span><a id="line.219"> @Override</a>
<span class="sourceLineNo">220</span><a id="line.220"> public List&lt;Role&gt; getAllAssignableRoles()</a>
<span class="sourceLineNo">221</span><a id="line.221"> throws RbacManagerException</a>
<span class="sourceLineNo">222</span><a id="line.222"> {</a>
<span class="sourceLineNo">223</span><a id="line.223"> try</a>
<span class="sourceLineNo">224</span><a id="line.224"> {</a>
<span class="sourceLineNo">225</span><a id="line.225"> return ldapRoleMapperConfiguration.getLdapGroupMappings( ).entrySet( ).stream( ).flatMap( entry -&gt;{</a>
<span class="sourceLineNo">226</span><a id="line.226"> if (entry.getValue()==null) {</a>
<span class="sourceLineNo">227</span><a id="line.227"> return Stream.empty( );</a>
<span class="sourceLineNo">228</span><a id="line.228"> } else</a>
<span class="sourceLineNo">229</span><a id="line.229"> {</a>
<span class="sourceLineNo">230</span><a id="line.230"> return entry.getValue( ).stream( ).map( role -&gt; new RoleImpl( entry.getKey( ) + role, role ) );</a>
<span class="sourceLineNo">231</span><a id="line.231"> }</a>
<span class="sourceLineNo">232</span><a id="line.232"> } ).collect( Collectors.toList( ) );</a>
<span class="sourceLineNo">233</span><a id="line.233"> }</a>
<span class="sourceLineNo">234</span><a id="line.234"> catch ( MappingException e )</a>
<span class="sourceLineNo">235</span><a id="line.235"> {</a>
<span class="sourceLineNo">236</span><a id="line.236"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">237</span><a id="line.237"> }</a>
<span class="sourceLineNo">238</span><a id="line.238"> }</a>
<span class="sourceLineNo">239</span><a id="line.239"></a>
<span class="sourceLineNo">240</span><a id="line.240"> @Override</a>
<span class="sourceLineNo">241</span><a id="line.241"> public List&lt;? extends Operation&gt; getAllOperations()</a>
<span class="sourceLineNo">242</span><a id="line.242"> throws RbacManagerException</a>
<span class="sourceLineNo">243</span><a id="line.243"> {</a>
<span class="sourceLineNo">244</span><a id="line.244"> return this.rbacImpl.getAllOperations();</a>
<span class="sourceLineNo">245</span><a id="line.245"> }</a>
<span class="sourceLineNo">246</span><a id="line.246"></a>
<span class="sourceLineNo">247</span><a id="line.247"> @Override</a>
<span class="sourceLineNo">248</span><a id="line.248"> public List&lt;? extends Permission&gt; getAllPermissions()</a>
<span class="sourceLineNo">249</span><a id="line.249"> throws RbacManagerException</a>
<span class="sourceLineNo">250</span><a id="line.250"> {</a>
<span class="sourceLineNo">251</span><a id="line.251"> return this.rbacImpl.getAllPermissions();</a>
<span class="sourceLineNo">252</span><a id="line.252"> }</a>
<span class="sourceLineNo">253</span><a id="line.253"></a>
<span class="sourceLineNo">254</span><a id="line.254"> @Override</a>
<span class="sourceLineNo">255</span><a id="line.255"> public List&lt;? extends Resource&gt; getAllResources()</a>
<span class="sourceLineNo">256</span><a id="line.256"> throws RbacManagerException</a>
<span class="sourceLineNo">257</span><a id="line.257"> {</a>
<span class="sourceLineNo">258</span><a id="line.258"> return this.rbacImpl.getAllResources();</a>
<span class="sourceLineNo">259</span><a id="line.259"> }</a>
<span class="sourceLineNo">260</span><a id="line.260"></a>
<span class="sourceLineNo">261</span><a id="line.261"> @Override</a>
<span class="sourceLineNo">262</span><a id="line.262"> public List&lt;Role&gt; getAllRoles()</a>
<span class="sourceLineNo">263</span><a id="line.263"> throws RbacManagerException</a>
<span class="sourceLineNo">264</span><a id="line.264"> {</a>
<span class="sourceLineNo">265</span><a id="line.265"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">266</span><a id="line.266"> DirContext context = null;</a>
<span class="sourceLineNo">267</span><a id="line.267"> try</a>
<span class="sourceLineNo">268</span><a id="line.268"> {</a>
<span class="sourceLineNo">269</span><a id="line.269"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">270</span><a id="line.270"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">271</span><a id="line.271"></a>
<span class="sourceLineNo">272</span><a id="line.272"> List&lt;String&gt; groups = ldapRoleMapper.getAllGroups( context );</a>
<span class="sourceLineNo">273</span><a id="line.273"> return mapToRoles( groups );</a>
<span class="sourceLineNo">274</span><a id="line.274"> }</a>
<span class="sourceLineNo">275</span><a id="line.275"> catch ( MappingException e )</a>
<span class="sourceLineNo">276</span><a id="line.276"> {</a>
<span class="sourceLineNo">277</span><a id="line.277"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">278</span><a id="line.278"> }</a>
<span class="sourceLineNo">279</span><a id="line.279"> catch ( LdapException e )</a>
<span class="sourceLineNo">280</span><a id="line.280"> {</a>
<span class="sourceLineNo">281</span><a id="line.281"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">282</span><a id="line.282"> }</a>
<span class="sourceLineNo">283</span><a id="line.283"> finally</a>
<span class="sourceLineNo">284</span><a id="line.284"> {</a>
<span class="sourceLineNo">285</span><a id="line.285"> closeContext( context );</a>
<span class="sourceLineNo">286</span><a id="line.286"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">287</span><a id="line.287"> }</a>
<span class="sourceLineNo">288</span><a id="line.288"> //return this.rbacImpl.getAllRoles();</a>
<span class="sourceLineNo">289</span><a id="line.289"> }</a>
<span class="sourceLineNo">290</span><a id="line.290"></a>
<span class="sourceLineNo">291</span><a id="line.291"></a>
<span class="sourceLineNo">292</span><a id="line.292"> @Override</a>
<span class="sourceLineNo">293</span><a id="line.293"> public List&lt;UserAssignment&gt; getAllUserAssignments()</a>
<span class="sourceLineNo">294</span><a id="line.294"> throws RbacManagerException</a>
<span class="sourceLineNo">295</span><a id="line.295"> {</a>
<span class="sourceLineNo">296</span><a id="line.296"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">297</span><a id="line.297"> DirContext context = null;</a>
<span class="sourceLineNo">298</span><a id="line.298"> try</a>
<span class="sourceLineNo">299</span><a id="line.299"> {</a>
<span class="sourceLineNo">300</span><a id="line.300"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">301</span><a id="line.301"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">302</span><a id="line.302"> Map&lt;String, Collection&lt;String&gt;&gt; usersWithRoles = ldapController.findUsersWithRoles( context );</a>
<span class="sourceLineNo">303</span><a id="line.303"> List&lt;UserAssignment&gt; userAssignments = new ArrayList&lt;UserAssignment&gt;( usersWithRoles.size() );</a>
<span class="sourceLineNo">304</span><a id="line.304"></a>
<span class="sourceLineNo">305</span><a id="line.305"> for ( Map.Entry&lt;String, Collection&lt;String&gt;&gt; entry : usersWithRoles.entrySet() )</a>
<span class="sourceLineNo">306</span><a id="line.306"> {</a>
<span class="sourceLineNo">307</span><a id="line.307"> UserAssignment userAssignment = new UserAssignmentImpl( entry.getKey(), entry.getValue() );</a>
<span class="sourceLineNo">308</span><a id="line.308"> userAssignments.add( userAssignment );</a>
<span class="sourceLineNo">309</span><a id="line.309"> userAssignmentsCache.put( userAssignment.getPrincipal(), userAssignment );</a>
<span class="sourceLineNo">310</span><a id="line.310"> }</a>
<span class="sourceLineNo">311</span><a id="line.311"></a>
<span class="sourceLineNo">312</span><a id="line.312"> return userAssignments;</a>
<span class="sourceLineNo">313</span><a id="line.313"> }</a>
<span class="sourceLineNo">314</span><a id="line.314"> catch ( LdapControllerException e )</a>
<span class="sourceLineNo">315</span><a id="line.315"> {</a>
<span class="sourceLineNo">316</span><a id="line.316"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">317</span><a id="line.317"> }</a>
<span class="sourceLineNo">318</span><a id="line.318"> catch ( LdapException e )</a>
<span class="sourceLineNo">319</span><a id="line.319"> {</a>
<span class="sourceLineNo">320</span><a id="line.320"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">321</span><a id="line.321"> }</a>
<span class="sourceLineNo">322</span><a id="line.322"> finally</a>
<span class="sourceLineNo">323</span><a id="line.323"> {</a>
<span class="sourceLineNo">324</span><a id="line.324"> closeContext( context );</a>
<span class="sourceLineNo">325</span><a id="line.325"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">326</span><a id="line.326"> }</a>
<span class="sourceLineNo">327</span><a id="line.327"> }</a>
<span class="sourceLineNo">328</span><a id="line.328"></a>
<span class="sourceLineNo">329</span><a id="line.329"> protected void closeLdapConnection( LdapConnection ldapConnection )</a>
<span class="sourceLineNo">330</span><a id="line.330"> {</a>
<span class="sourceLineNo">331</span><a id="line.331"> if ( ldapConnection != null )</a>
<span class="sourceLineNo">332</span><a id="line.332"> {</a>
<span class="sourceLineNo">333</span><a id="line.333"> try</a>
<span class="sourceLineNo">334</span><a id="line.334"> {</a>
<span class="sourceLineNo">335</span><a id="line.335"> ldapConnection.close();</a>
<span class="sourceLineNo">336</span><a id="line.336"> }</a>
<span class="sourceLineNo">337</span><a id="line.337"> catch ( NamingException e )</a>
<span class="sourceLineNo">338</span><a id="line.338"> {</a>
<span class="sourceLineNo">339</span><a id="line.339"> log.error( "Could not close connection: {}", e.getMessage( ), e );</a>
<span class="sourceLineNo">340</span><a id="line.340"> }</a>
<span class="sourceLineNo">341</span><a id="line.341"> }</a>
<span class="sourceLineNo">342</span><a id="line.342"> }</a>
<span class="sourceLineNo">343</span><a id="line.343"></a>
<span class="sourceLineNo">344</span><a id="line.344"> protected void closeContext( DirContext context )</a>
<span class="sourceLineNo">345</span><a id="line.345"> {</a>
<span class="sourceLineNo">346</span><a id="line.346"> if ( context != null )</a>
<span class="sourceLineNo">347</span><a id="line.347"> {</a>
<span class="sourceLineNo">348</span><a id="line.348"> try</a>
<span class="sourceLineNo">349</span><a id="line.349"> {</a>
<span class="sourceLineNo">350</span><a id="line.350"> context.close();</a>
<span class="sourceLineNo">351</span><a id="line.351"> }</a>
<span class="sourceLineNo">352</span><a id="line.352"> catch ( NamingException e )</a>
<span class="sourceLineNo">353</span><a id="line.353"> {</a>
<span class="sourceLineNo">354</span><a id="line.354"> log.warn( "skip issue closing context: {}", e.getMessage() );</a>
<span class="sourceLineNo">355</span><a id="line.355"> }</a>
<span class="sourceLineNo">356</span><a id="line.356"> }</a>
<span class="sourceLineNo">357</span><a id="line.357"> }</a>
<span class="sourceLineNo">358</span><a id="line.358"></a>
<span class="sourceLineNo">359</span><a id="line.359"> /**</a>
<span class="sourceLineNo">360</span><a id="line.360"> * public Map&lt;String, List&lt;Permission&gt;&gt; getAssignedPermissionMap( String username )</a>
<span class="sourceLineNo">361</span><a id="line.361"> * throws RbacManagerException</a>
<span class="sourceLineNo">362</span><a id="line.362"> * {</a>
<span class="sourceLineNo">363</span><a id="line.363"> * return this.rbacImpl.getAssignedPermissionMap( username );</a>
<span class="sourceLineNo">364</span><a id="line.364"> * }*</a>
<span class="sourceLineNo">365</span><a id="line.365"> */</a>
<span class="sourceLineNo">366</span><a id="line.366"></a>
<span class="sourceLineNo">367</span><a id="line.367"> /*public Set&lt;Permission&gt; getAssignedPermissions( String username )</a>
<span class="sourceLineNo">368</span><a id="line.368"> throws RbacObjectNotFoundException, RbacManagerException</a>
<span class="sourceLineNo">369</span><a id="line.369"> {</a>
<span class="sourceLineNo">370</span><a id="line.370"> // TODO here !!</a>
<span class="sourceLineNo">371</span><a id="line.371"> return this.rbacImpl.getAssignedPermissions( username );</a>
<span class="sourceLineNo">372</span><a id="line.372"> }*/</a>
<span class="sourceLineNo">373</span><a id="line.373"> private List&lt;Role&gt; mapToRoles( List&lt;String&gt; groups )</a>
<span class="sourceLineNo">374</span><a id="line.374"> throws MappingException, RbacManagerException</a>
<span class="sourceLineNo">375</span><a id="line.375"> {</a>
<span class="sourceLineNo">376</span><a id="line.376"> if ( groups == null || groups.isEmpty() )</a>
<span class="sourceLineNo">377</span><a id="line.377"> {</a>
<span class="sourceLineNo">378</span><a id="line.378"> return Collections.emptyList();</a>
<span class="sourceLineNo">379</span><a id="line.379"> }</a>
<span class="sourceLineNo">380</span><a id="line.380"> final Map&lt;String, Collection&lt;String&gt;&gt; mappedGroups = ldapRoleMapperConfiguration.getLdapGroupMappings();</a>
<span class="sourceLineNo">381</span><a id="line.381"> try</a>
<span class="sourceLineNo">382</span><a id="line.382"> {</a>
<span class="sourceLineNo">383</span><a id="line.383"> return groups.stream( ).flatMap( group -&gt; mappedGroups.get( group ) == null ?</a>
<span class="sourceLineNo">384</span><a id="line.384"> ( this.ldapRoleMapper.isUseDefaultRoleName( ) ? Stream.of( this.buildRole( group, group ) ) : Stream.empty( ) )</a>
<span class="sourceLineNo">385</span><a id="line.385"> : mappedGroups.get( group ).stream( ).map( roleName -&gt; this.buildRole( group + roleName, roleName ) ) ).collect( Collectors.toList( ) );</a>
<span class="sourceLineNo">386</span><a id="line.386"> } catch (RuntimeException e) {</a>
<span class="sourceLineNo">387</span><a id="line.387"> if (e.getCause() instanceof RbacManagerException)</a>
<span class="sourceLineNo">388</span><a id="line.388"> {</a>
<span class="sourceLineNo">389</span><a id="line.389"> throw ( (RbacManagerException) e.getCause( ) );</a>
<span class="sourceLineNo">390</span><a id="line.390"> } else {</a>
<span class="sourceLineNo">391</span><a id="line.391"> throw new MappingException( e.getMessage(), e );</a>
<span class="sourceLineNo">392</span><a id="line.392"> }</a>
<span class="sourceLineNo">393</span><a id="line.393"> }</a>
<span class="sourceLineNo">394</span><a id="line.394"> }</a>
<span class="sourceLineNo">395</span><a id="line.395"></a>
<span class="sourceLineNo">396</span><a id="line.396"> private Role buildRole( String groupId, String roleName )</a>
<span class="sourceLineNo">397</span><a id="line.397"> {</a>
<span class="sourceLineNo">398</span><a id="line.398"> Role role = null;</a>
<span class="sourceLineNo">399</span><a id="line.399"> try</a>
<span class="sourceLineNo">400</span><a id="line.400"> {</a>
<span class="sourceLineNo">401</span><a id="line.401"> role = this.rbacImpl.getRole( roleName );</a>
<span class="sourceLineNo">402</span><a id="line.402"> }</a>
<span class="sourceLineNo">403</span><a id="line.403"> catch ( RbacObjectNotFoundException e )</a>
<span class="sourceLineNo">404</span><a id="line.404"> {</a>
<span class="sourceLineNo">405</span><a id="line.405"> // if it's mapped role to a group it doesn't exist in jpa</a>
<span class="sourceLineNo">406</span><a id="line.406"> }</a>
<span class="sourceLineNo">407</span><a id="line.407"> catch ( RbacManagerException e )</a>
<span class="sourceLineNo">408</span><a id="line.408"> {</a>
<span class="sourceLineNo">409</span><a id="line.409"> throw new RuntimeException( e );</a>
<span class="sourceLineNo">410</span><a id="line.410"> }</a>
<span class="sourceLineNo">411</span><a id="line.411"> role = ( role == null ) ? new RoleImpl( groupId, roleName ) : role;</a>
<span class="sourceLineNo">412</span><a id="line.412"> if ( role != null )</a>
<span class="sourceLineNo">413</span><a id="line.413"> {</a>
<span class="sourceLineNo">414</span><a id="line.414"> rolesCache.put( role.getName(), role );</a>
<span class="sourceLineNo">415</span><a id="line.415"></a>
<span class="sourceLineNo">416</span><a id="line.416"> }</a>
<span class="sourceLineNo">417</span><a id="line.417"> return role;</a>
<span class="sourceLineNo">418</span><a id="line.418"> }</a>
<span class="sourceLineNo">419</span><a id="line.419"></a>
<span class="sourceLineNo">420</span><a id="line.420"> protected List&lt;String&gt; getRealRoles()</a>
<span class="sourceLineNo">421</span><a id="line.421"> throws RbacManagerException</a>
<span class="sourceLineNo">422</span><a id="line.422"> {</a>
<span class="sourceLineNo">423</span><a id="line.423"> List&lt;? extends Role&gt; roles = this.rbacImpl.getAllRoles();</a>
<span class="sourceLineNo">424</span><a id="line.424"> List&lt;String&gt; roleNames = new ArrayList&lt;String&gt;( roles.size() );</a>
<span class="sourceLineNo">425</span><a id="line.425"> for ( Role role : roles )</a>
<span class="sourceLineNo">426</span><a id="line.426"> {</a>
<span class="sourceLineNo">427</span><a id="line.427"> roleNames.add( role.getName() );</a>
<span class="sourceLineNo">428</span><a id="line.428"> }</a>
<span class="sourceLineNo">429</span><a id="line.429"> return roleNames;</a>
<span class="sourceLineNo">430</span><a id="line.430"> }</a>
<span class="sourceLineNo">431</span><a id="line.431"></a>
<span class="sourceLineNo">432</span><a id="line.432"> @Override</a>
<span class="sourceLineNo">433</span><a id="line.433"> public Collection&lt;Role&gt; getAssignedRoles( String username )</a>
<span class="sourceLineNo">434</span><a id="line.434"> throws RbacManagerException</a>
<span class="sourceLineNo">435</span><a id="line.435"> {</a>
<span class="sourceLineNo">436</span><a id="line.436"></a>
<span class="sourceLineNo">437</span><a id="line.437"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">438</span><a id="line.438"> DirContext context = null;</a>
<span class="sourceLineNo">439</span><a id="line.439"></a>
<span class="sourceLineNo">440</span><a id="line.440"> try</a>
<span class="sourceLineNo">441</span><a id="line.441"> {</a>
<span class="sourceLineNo">442</span><a id="line.442"></a>
<span class="sourceLineNo">443</span><a id="line.443"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">444</span><a id="line.444"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">445</span><a id="line.445"> List&lt;String&gt; roleNames = ldapRoleMapper.getRoles( username, context, getRealRoles() );</a>
<span class="sourceLineNo">446</span><a id="line.446"></a>
<span class="sourceLineNo">447</span><a id="line.447"> if ( roleNames.isEmpty() )</a>
<span class="sourceLineNo">448</span><a id="line.448"> {</a>
<span class="sourceLineNo">449</span><a id="line.449"> return Collections.emptyList();</a>
<span class="sourceLineNo">450</span><a id="line.450"> }</a>
<span class="sourceLineNo">451</span><a id="line.451"></a>
<span class="sourceLineNo">452</span><a id="line.452"> List&lt;Role&gt; roles = new ArrayList&lt;Role&gt;( roleNames.size() );</a>
<span class="sourceLineNo">453</span><a id="line.453"></a>
<span class="sourceLineNo">454</span><a id="line.454"> for ( String name : roleNames )</a>
<span class="sourceLineNo">455</span><a id="line.455"> {</a>
<span class="sourceLineNo">456</span><a id="line.456"> roles.add( this.rbacImpl.getRole( name ) );// new RoleImpl( name ) );</a>
<span class="sourceLineNo">457</span><a id="line.457"> }</a>
<span class="sourceLineNo">458</span><a id="line.458"></a>
<span class="sourceLineNo">459</span><a id="line.459"> return roles;</a>
<span class="sourceLineNo">460</span><a id="line.460"> }</a>
<span class="sourceLineNo">461</span><a id="line.461"> catch ( MappingException e )</a>
<span class="sourceLineNo">462</span><a id="line.462"> {</a>
<span class="sourceLineNo">463</span><a id="line.463"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">464</span><a id="line.464"> }</a>
<span class="sourceLineNo">465</span><a id="line.465"> catch ( LdapException e )</a>
<span class="sourceLineNo">466</span><a id="line.466"> {</a>
<span class="sourceLineNo">467</span><a id="line.467"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">468</span><a id="line.468"> } finally</a>
<span class="sourceLineNo">469</span><a id="line.469"> {</a>
<span class="sourceLineNo">470</span><a id="line.470"> closeContext( context );</a>
<span class="sourceLineNo">471</span><a id="line.471"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">472</span><a id="line.472"> }</a>
<span class="sourceLineNo">473</span><a id="line.473"> }</a>
<span class="sourceLineNo">474</span><a id="line.474"></a>
<span class="sourceLineNo">475</span><a id="line.475"> @Override</a>
<span class="sourceLineNo">476</span><a id="line.476"> public Collection&lt;Role&gt; getAssignedRoles( UserAssignment userAssignment )</a>
<span class="sourceLineNo">477</span><a id="line.477"> throws RbacManagerException</a>
<span class="sourceLineNo">478</span><a id="line.478"> {</a>
<span class="sourceLineNo">479</span><a id="line.479"> return getAssignedRoles( userAssignment.getPrincipal() );</a>
<span class="sourceLineNo">480</span><a id="line.480"> }</a>
<span class="sourceLineNo">481</span><a id="line.481"></a>
<span class="sourceLineNo">482</span><a id="line.482"> @Override</a>
<span class="sourceLineNo">483</span><a id="line.483"> public Map&lt;String, ? extends Role&gt; getChildRoleNames( Role role )</a>
<span class="sourceLineNo">484</span><a id="line.484"> throws RbacManagerException</a>
<span class="sourceLineNo">485</span><a id="line.485"> {</a>
<span class="sourceLineNo">486</span><a id="line.486"> return this.rbacImpl.getChildRoleNames( role );</a>
<span class="sourceLineNo">487</span><a id="line.487"> }</a>
<span class="sourceLineNo">488</span><a id="line.488"></a>
<span class="sourceLineNo">489</span><a id="line.489"> @Override</a>
<span class="sourceLineNo">490</span><a id="line.490"> public Map&lt;String, ? extends Role&gt; getChildRoleIds( Role role ) throws RbacManagerException</a>
<span class="sourceLineNo">491</span><a id="line.491"> {</a>
<span class="sourceLineNo">492</span><a id="line.492"> return this.rbacImpl.getChildRoleIds( role );</a>
<span class="sourceLineNo">493</span><a id="line.493"> }</a>
<span class="sourceLineNo">494</span><a id="line.494"></a>
<span class="sourceLineNo">495</span><a id="line.495"> @Override</a>
<span class="sourceLineNo">496</span><a id="line.496"> public Map&lt;String, ? extends Role&gt; getParentRoleNames( Role role )</a>
<span class="sourceLineNo">497</span><a id="line.497"> throws RbacManagerException</a>
<span class="sourceLineNo">498</span><a id="line.498"> {</a>
<span class="sourceLineNo">499</span><a id="line.499"> return this.rbacImpl.getParentRoleNames( role );</a>
<span class="sourceLineNo">500</span><a id="line.500"> }</a>
<span class="sourceLineNo">501</span><a id="line.501"></a>
<span class="sourceLineNo">502</span><a id="line.502"> @Override</a>
<span class="sourceLineNo">503</span><a id="line.503"> public Map&lt;String, ? extends Role&gt; getParentRoleIds( Role role ) throws RbacManagerException</a>
<span class="sourceLineNo">504</span><a id="line.504"> {</a>
<span class="sourceLineNo">505</span><a id="line.505"> return this.rbacImpl.getParentRoleIds( role );</a>
<span class="sourceLineNo">506</span><a id="line.506"> }</a>
<span class="sourceLineNo">507</span><a id="line.507"></a>
<span class="sourceLineNo">508</span><a id="line.508"> //</a>
<span class="sourceLineNo">509</span><a id="line.509"> // public Collection&lt;Role&gt; getEffectivelyAssignedRoles( String username )</a>
<span class="sourceLineNo">510</span><a id="line.510"> // throws RbacManagerException</a>
<span class="sourceLineNo">511</span><a id="line.511"> // {</a>
<span class="sourceLineNo">512</span><a id="line.512"> // TODO here !!</a>
<span class="sourceLineNo">513</span><a id="line.513"> // return this.rbacImpl.getEffectivelyAssignedRoles( username );</a>
<span class="sourceLineNo">514</span><a id="line.514"> // }</a>
<span class="sourceLineNo">515</span><a id="line.515"></a>
<span class="sourceLineNo">516</span><a id="line.516"> //public Collection&lt;Role&gt; getEffectivelyUnassignedRoles( String username )</a>
<span class="sourceLineNo">517</span><a id="line.517"> //throws RbacManagerException</a>
<span class="sourceLineNo">518</span><a id="line.518"> //{</a>
<span class="sourceLineNo">519</span><a id="line.519"> // TODO here !!</a>
<span class="sourceLineNo">520</span><a id="line.520"> // return this.rbacImpl.getEffectivelyUnassignedRoles( username );</a>
<span class="sourceLineNo">521</span><a id="line.521"> // }</a>
<span class="sourceLineNo">522</span><a id="line.522"></a>
<span class="sourceLineNo">523</span><a id="line.523"></a>
<span class="sourceLineNo">524</span><a id="line.524"> @Override</a>
<span class="sourceLineNo">525</span><a id="line.525"> public Set&lt;? extends Role&gt; getEffectiveRoles( Role role )</a>
<span class="sourceLineNo">526</span><a id="line.526"> throws RbacManagerException</a>
<span class="sourceLineNo">527</span><a id="line.527"> {</a>
<span class="sourceLineNo">528</span><a id="line.528"> return this.rbacImpl.getEffectiveRoles( role );</a>
<span class="sourceLineNo">529</span><a id="line.529"> }</a>
<span class="sourceLineNo">530</span><a id="line.530"></a>
<span class="sourceLineNo">531</span><a id="line.531"> @Override</a>
<span class="sourceLineNo">532</span><a id="line.532"> public Resource getGlobalResource()</a>
<span class="sourceLineNo">533</span><a id="line.533"> throws RbacManagerException</a>
<span class="sourceLineNo">534</span><a id="line.534"> {</a>
<span class="sourceLineNo">535</span><a id="line.535"> return this.rbacImpl.getGlobalResource();</a>
<span class="sourceLineNo">536</span><a id="line.536"> }</a>
<span class="sourceLineNo">537</span><a id="line.537"></a>
<span class="sourceLineNo">538</span><a id="line.538"> @Override</a>
<span class="sourceLineNo">539</span><a id="line.539"> public Operation getOperation( String operationName )</a>
<span class="sourceLineNo">540</span><a id="line.540"> throws RbacManagerException</a>
<span class="sourceLineNo">541</span><a id="line.541"> {</a>
<span class="sourceLineNo">542</span><a id="line.542"> return this.rbacImpl.getOperation( operationName );</a>
<span class="sourceLineNo">543</span><a id="line.543"> }</a>
<span class="sourceLineNo">544</span><a id="line.544"></a>
<span class="sourceLineNo">545</span><a id="line.545"> @Override</a>
<span class="sourceLineNo">546</span><a id="line.546"> public Permission getPermission( String permissionName )</a>
<span class="sourceLineNo">547</span><a id="line.547"> throws RbacManagerException</a>
<span class="sourceLineNo">548</span><a id="line.548"> {</a>
<span class="sourceLineNo">549</span><a id="line.549"> return this.rbacImpl.getPermission( permissionName );</a>
<span class="sourceLineNo">550</span><a id="line.550"> }</a>
<span class="sourceLineNo">551</span><a id="line.551"></a>
<span class="sourceLineNo">552</span><a id="line.552"> @Override</a>
<span class="sourceLineNo">553</span><a id="line.553"> public Resource getResource( String resourceIdentifier )</a>
<span class="sourceLineNo">554</span><a id="line.554"> throws RbacManagerException</a>
<span class="sourceLineNo">555</span><a id="line.555"> {</a>
<span class="sourceLineNo">556</span><a id="line.556"> return this.rbacImpl.getResource( resourceIdentifier );</a>
<span class="sourceLineNo">557</span><a id="line.557"> }</a>
<span class="sourceLineNo">558</span><a id="line.558"></a>
<span class="sourceLineNo">559</span><a id="line.559"> @Override</a>
<span class="sourceLineNo">560</span><a id="line.560"> public Role getRole( String roleName )</a>
<span class="sourceLineNo">561</span><a id="line.561"> throws RbacManagerException</a>
<span class="sourceLineNo">562</span><a id="line.562"> {</a>
<span class="sourceLineNo">563</span><a id="line.563"></a>
<span class="sourceLineNo">564</span><a id="line.564"> Role role = rolesCache.get( roleName );</a>
<span class="sourceLineNo">565</span><a id="line.565"> if ( role != null )</a>
<span class="sourceLineNo">566</span><a id="line.566"> {</a>
<span class="sourceLineNo">567</span><a id="line.567"> return role;</a>
<span class="sourceLineNo">568</span><a id="line.568"> }</a>
<span class="sourceLineNo">569</span><a id="line.569"> if ( !checkIfLdapRole( roleName ) ) return null;</a>
<span class="sourceLineNo">570</span><a id="line.570"> role = this.rbacImpl.getRole( roleName );</a>
<span class="sourceLineNo">571</span><a id="line.571"> if (role==null)</a>
<span class="sourceLineNo">572</span><a id="line.572"> {</a>
<span class="sourceLineNo">573</span><a id="line.573"> try</a>
<span class="sourceLineNo">574</span><a id="line.574"> {</a>
<span class="sourceLineNo">575</span><a id="line.575"> String groupName = ldapRoleMapperConfiguration.getLdapGroupMappings( ).entrySet( ).stream( )</a>
<span class="sourceLineNo">576</span><a id="line.576"> .filter( entry -&gt; entry.getValue( ).contains( roleName ) )</a>
<span class="sourceLineNo">577</span><a id="line.577"> .map( entry -&gt; entry.getKey( ) ).findFirst( ).orElseGet( String::new );</a>
<span class="sourceLineNo">578</span><a id="line.578"> role = new RoleImpl( groupName + roleName, roleName );</a>
<span class="sourceLineNo">579</span><a id="line.579"> }</a>
<span class="sourceLineNo">580</span><a id="line.580"> catch ( MappingException e )</a>
<span class="sourceLineNo">581</span><a id="line.581"> {</a>
<span class="sourceLineNo">582</span><a id="line.582"> role = new RoleImpl( roleName );</a>
<span class="sourceLineNo">583</span><a id="line.583"> }</a>
<span class="sourceLineNo">584</span><a id="line.584"> };</a>
<span class="sourceLineNo">585</span><a id="line.585"> rolesCache.put( roleName, role );</a>
<span class="sourceLineNo">586</span><a id="line.586"> return role;</a>
<span class="sourceLineNo">587</span><a id="line.587"> }</a>
<span class="sourceLineNo">588</span><a id="line.588"></a>
<span class="sourceLineNo">589</span><a id="line.589"> protected boolean checkIfLdapRole( String roleName ) throws RbacManagerException</a>
<span class="sourceLineNo">590</span><a id="line.590"> {</a>
<span class="sourceLineNo">591</span><a id="line.591"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">592</span><a id="line.592"> DirContext context = null;</a>
<span class="sourceLineNo">593</span><a id="line.593"> //verify it's a ldap group</a>
<span class="sourceLineNo">594</span><a id="line.594"> try</a>
<span class="sourceLineNo">595</span><a id="line.595"> {</a>
<span class="sourceLineNo">596</span><a id="line.596"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">597</span><a id="line.597"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">598</span><a id="line.598"> if ( !ldapRoleMapper.hasRole( context, roleName ) )</a>
<span class="sourceLineNo">599</span><a id="line.599"> {</a>
<span class="sourceLineNo">600</span><a id="line.600"> return false;</a>
<span class="sourceLineNo">601</span><a id="line.601"> }</a>
<span class="sourceLineNo">602</span><a id="line.602"> }</a>
<span class="sourceLineNo">603</span><a id="line.603"> catch ( MappingException e )</a>
<span class="sourceLineNo">604</span><a id="line.604"> {</a>
<span class="sourceLineNo">605</span><a id="line.605"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">606</span><a id="line.606"> }</a>
<span class="sourceLineNo">607</span><a id="line.607"> catch ( LdapException e )</a>
<span class="sourceLineNo">608</span><a id="line.608"> {</a>
<span class="sourceLineNo">609</span><a id="line.609"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">610</span><a id="line.610"> } finally</a>
<span class="sourceLineNo">611</span><a id="line.611"> {</a>
<span class="sourceLineNo">612</span><a id="line.612"> closeContext( context );</a>
<span class="sourceLineNo">613</span><a id="line.613"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">614</span><a id="line.614"> }</a>
<span class="sourceLineNo">615</span><a id="line.615"> return true;</a>
<span class="sourceLineNo">616</span><a id="line.616"> }</a>
<span class="sourceLineNo">617</span><a id="line.617"></a>
<span class="sourceLineNo">618</span><a id="line.618"> @Override</a>
<span class="sourceLineNo">619</span><a id="line.619"> public Role getRoleById( String id ) throws RbacObjectNotFoundException, RbacManagerException</a>
<span class="sourceLineNo">620</span><a id="line.620"> {</a>
<span class="sourceLineNo">621</span><a id="line.621"> Role role = rbacImpl.getRoleById( id );</a>
<span class="sourceLineNo">622</span><a id="line.622"> if (role==null) {</a>
<span class="sourceLineNo">623</span><a id="line.623"> throw new RbacObjectNotFoundException( "Role with id " + id + " not found" );</a>
<span class="sourceLineNo">624</span><a id="line.624"> } else {</a>
<span class="sourceLineNo">625</span><a id="line.625"> if (checkIfLdapRole( role.getName() )) {</a>
<span class="sourceLineNo">626</span><a id="line.626"> return role;</a>
<span class="sourceLineNo">627</span><a id="line.627"> } else {</a>
<span class="sourceLineNo">628</span><a id="line.628"> return null;</a>
<span class="sourceLineNo">629</span><a id="line.629"> }</a>
<span class="sourceLineNo">630</span><a id="line.630"> }</a>
<span class="sourceLineNo">631</span><a id="line.631"> }</a>
<span class="sourceLineNo">632</span><a id="line.632"></a>
<span class="sourceLineNo">633</span><a id="line.633"> @Override</a>
<span class="sourceLineNo">634</span><a id="line.634"> public Map&lt;String, ? extends Role&gt; getRoles( Collection&lt;String&gt; roleNames )</a>
<span class="sourceLineNo">635</span><a id="line.635"> throws RbacManagerException</a>
<span class="sourceLineNo">636</span><a id="line.636"> {</a>
<span class="sourceLineNo">637</span><a id="line.637"> return this.rbacImpl.getRoles( roleNames );</a>
<span class="sourceLineNo">638</span><a id="line.638"> }</a>
<span class="sourceLineNo">639</span><a id="line.639"></a>
<span class="sourceLineNo">640</span><a id="line.640"> @Override</a>
<span class="sourceLineNo">641</span><a id="line.641"> public Collection&lt;Role&gt; getUnassignedRoles( String username )</a>
<span class="sourceLineNo">642</span><a id="line.642"> throws RbacManagerException</a>
<span class="sourceLineNo">643</span><a id="line.643"> {</a>
<span class="sourceLineNo">644</span><a id="line.644"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">645</span><a id="line.645"></a>
<span class="sourceLineNo">646</span><a id="line.646"> DirContext context = null;</a>
<span class="sourceLineNo">647</span><a id="line.647"></a>
<span class="sourceLineNo">648</span><a id="line.648"> try</a>
<span class="sourceLineNo">649</span><a id="line.649"> {</a>
<span class="sourceLineNo">650</span><a id="line.650"></a>
<span class="sourceLineNo">651</span><a id="line.651"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">652</span><a id="line.652"></a>
<span class="sourceLineNo">653</span><a id="line.653"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">654</span><a id="line.654"></a>
<span class="sourceLineNo">655</span><a id="line.655"> List&lt;String&gt; allRoles = ldapRoleMapper.getAllRoles( context );</a>
<span class="sourceLineNo">656</span><a id="line.656"> final List&lt;String&gt; userRoles = ldapRoleMapper.getRoles( username, context, getRealRoles() );</a>
<span class="sourceLineNo">657</span><a id="line.657"></a>
<span class="sourceLineNo">658</span><a id="line.658"> List&lt;Role&gt; unassignedRoles = new ArrayList&lt;Role&gt;();</a>
<span class="sourceLineNo">659</span><a id="line.659"></a>
<span class="sourceLineNo">660</span><a id="line.660"> for ( String roleName : allRoles )</a>
<span class="sourceLineNo">661</span><a id="line.661"> {</a>
<span class="sourceLineNo">662</span><a id="line.662"> if ( !userRoles.contains( roleName ) )</a>
<span class="sourceLineNo">663</span><a id="line.663"> {</a>
<span class="sourceLineNo">664</span><a id="line.664"> unassignedRoles.add( rbacImpl.getRole( roleName ) );</a>
<span class="sourceLineNo">665</span><a id="line.665"> }</a>
<span class="sourceLineNo">666</span><a id="line.666"> }</a>
<span class="sourceLineNo">667</span><a id="line.667"> return unassignedRoles;</a>
<span class="sourceLineNo">668</span><a id="line.668"> }</a>
<span class="sourceLineNo">669</span><a id="line.669"> catch ( MappingException e )</a>
<span class="sourceLineNo">670</span><a id="line.670"> {</a>
<span class="sourceLineNo">671</span><a id="line.671"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">672</span><a id="line.672"> }</a>
<span class="sourceLineNo">673</span><a id="line.673"> catch ( LdapException e )</a>
<span class="sourceLineNo">674</span><a id="line.674"> {</a>
<span class="sourceLineNo">675</span><a id="line.675"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">676</span><a id="line.676"> }</a>
<span class="sourceLineNo">677</span><a id="line.677"> finally</a>
<span class="sourceLineNo">678</span><a id="line.678"> {</a>
<span class="sourceLineNo">679</span><a id="line.679"> closeContext( context );</a>
<span class="sourceLineNo">680</span><a id="line.680"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">681</span><a id="line.681"> }</a>
<span class="sourceLineNo">682</span><a id="line.682"> }</a>
<span class="sourceLineNo">683</span><a id="line.683"></a>
<span class="sourceLineNo">684</span><a id="line.684"> @Override</a>
<span class="sourceLineNo">685</span><a id="line.685"> public UserAssignment getUserAssignment( String username )</a>
<span class="sourceLineNo">686</span><a id="line.686"> throws RbacManagerException</a>
<span class="sourceLineNo">687</span><a id="line.687"> {</a>
<span class="sourceLineNo">688</span><a id="line.688"> UserAssignment ua = userAssignmentsCache.get( username );</a>
<span class="sourceLineNo">689</span><a id="line.689"> if ( ua != null )</a>
<span class="sourceLineNo">690</span><a id="line.690"> {</a>
<span class="sourceLineNo">691</span><a id="line.691"> return ua;</a>
<span class="sourceLineNo">692</span><a id="line.692"> }</a>
<span class="sourceLineNo">693</span><a id="line.693"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">694</span><a id="line.694"> DirContext context = null;</a>
<span class="sourceLineNo">695</span><a id="line.695"> try</a>
<span class="sourceLineNo">696</span><a id="line.696"> {</a>
<span class="sourceLineNo">697</span><a id="line.697"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">698</span><a id="line.698"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">699</span><a id="line.699"> List&lt;String&gt; roles = ldapRoleMapper.getRoles( username, context, getRealRoles() )</a>
<span class="sourceLineNo">700</span><a id="line.700"> .stream( ).map( roleName -&gt; {</a>
<span class="sourceLineNo">701</span><a id="line.701"> try</a>
<span class="sourceLineNo">702</span><a id="line.702"> {</a>
<span class="sourceLineNo">703</span><a id="line.703"> return Optional.of( rbacImpl.getRole( roleName ).getId() );</a>
<span class="sourceLineNo">704</span><a id="line.704"> }</a>
<span class="sourceLineNo">705</span><a id="line.705"> catch ( RbacManagerException e )</a>
<span class="sourceLineNo">706</span><a id="line.706"> {</a>
<span class="sourceLineNo">707</span><a id="line.707"> return Optional.&lt;String&gt;empty( );</a>
<span class="sourceLineNo">708</span><a id="line.708"> }</a>
<span class="sourceLineNo">709</span><a id="line.709"> } ).filter( Optional::isPresent ).map( Optional::get ).collect( Collectors.toList() );</a>
<span class="sourceLineNo">710</span><a id="line.710"></a>
<span class="sourceLineNo">711</span><a id="line.711"> ua = new UserAssignmentImpl( username, roles );</a>
<span class="sourceLineNo">712</span><a id="line.712"></a>
<span class="sourceLineNo">713</span><a id="line.713"> userAssignmentsCache.put( username, ua );</a>
<span class="sourceLineNo">714</span><a id="line.714"></a>
<span class="sourceLineNo">715</span><a id="line.715"> return ua;</a>
<span class="sourceLineNo">716</span><a id="line.716"> }</a>
<span class="sourceLineNo">717</span><a id="line.717"> catch ( MappingException e )</a>
<span class="sourceLineNo">718</span><a id="line.718"> {</a>
<span class="sourceLineNo">719</span><a id="line.719"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">720</span><a id="line.720"> }</a>
<span class="sourceLineNo">721</span><a id="line.721"> catch ( LdapException e )</a>
<span class="sourceLineNo">722</span><a id="line.722"> {</a>
<span class="sourceLineNo">723</span><a id="line.723"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">724</span><a id="line.724"> }</a>
<span class="sourceLineNo">725</span><a id="line.725"> finally</a>
<span class="sourceLineNo">726</span><a id="line.726"> {</a>
<span class="sourceLineNo">727</span><a id="line.727"> closeContext( context );</a>
<span class="sourceLineNo">728</span><a id="line.728"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">729</span><a id="line.729"> }</a>
<span class="sourceLineNo">730</span><a id="line.730"></a>
<span class="sourceLineNo">731</span><a id="line.731"> //return this.rbacImpl.getUserAssignment( username );</a>
<span class="sourceLineNo">732</span><a id="line.732"> }</a>
<span class="sourceLineNo">733</span><a id="line.733"></a>
<span class="sourceLineNo">734</span><a id="line.734"> @Override</a>
<span class="sourceLineNo">735</span><a id="line.735"> public List&lt;? extends UserAssignment&gt; getUserAssignmentsForRoles( Collection&lt;String&gt; roleIds )</a>
<span class="sourceLineNo">736</span><a id="line.736"> throws RbacManagerException</a>
<span class="sourceLineNo">737</span><a id="line.737"> {</a>
<span class="sourceLineNo">738</span><a id="line.738"> // TODO from ldap</a>
<span class="sourceLineNo">739</span><a id="line.739"> return this.rbacImpl.getUserAssignmentsForRoles( roleIds );</a>
<span class="sourceLineNo">740</span><a id="line.740"> }</a>
<span class="sourceLineNo">741</span><a id="line.741"></a>
<span class="sourceLineNo">742</span><a id="line.742"> @Override</a>
<span class="sourceLineNo">743</span><a id="line.743"> public boolean operationExists( Operation operation )</a>
<span class="sourceLineNo">744</span><a id="line.744"> {</a>
<span class="sourceLineNo">745</span><a id="line.745"> return this.rbacImpl.operationExists( operation );</a>
<span class="sourceLineNo">746</span><a id="line.746"> }</a>
<span class="sourceLineNo">747</span><a id="line.747"></a>
<span class="sourceLineNo">748</span><a id="line.748"> @Override</a>
<span class="sourceLineNo">749</span><a id="line.749"> public boolean operationExists( String name )</a>
<span class="sourceLineNo">750</span><a id="line.750"> {</a>
<span class="sourceLineNo">751</span><a id="line.751"> return this.rbacImpl.operationExists( name );</a>
<span class="sourceLineNo">752</span><a id="line.752"> }</a>
<span class="sourceLineNo">753</span><a id="line.753"></a>
<span class="sourceLineNo">754</span><a id="line.754"> @Override</a>
<span class="sourceLineNo">755</span><a id="line.755"> public boolean permissionExists( Permission permission )</a>
<span class="sourceLineNo">756</span><a id="line.756"> {</a>
<span class="sourceLineNo">757</span><a id="line.757"> return this.rbacImpl.permissionExists( permission );</a>
<span class="sourceLineNo">758</span><a id="line.758"> }</a>
<span class="sourceLineNo">759</span><a id="line.759"></a>
<span class="sourceLineNo">760</span><a id="line.760"> @Override</a>
<span class="sourceLineNo">761</span><a id="line.761"> public boolean permissionExists( String name )</a>
<span class="sourceLineNo">762</span><a id="line.762"> {</a>
<span class="sourceLineNo">763</span><a id="line.763"> return this.rbacImpl.permissionExists( name );</a>
<span class="sourceLineNo">764</span><a id="line.764"> }</a>
<span class="sourceLineNo">765</span><a id="line.765"></a>
<span class="sourceLineNo">766</span><a id="line.766"> @Override</a>
<span class="sourceLineNo">767</span><a id="line.767"> public void rbacInit( boolean freshdb )</a>
<span class="sourceLineNo">768</span><a id="line.768"> {</a>
<span class="sourceLineNo">769</span><a id="line.769"> if ( rbacImpl instanceof RBACManagerListener )</a>
<span class="sourceLineNo">770</span><a id="line.770"> {</a>
<span class="sourceLineNo">771</span><a id="line.771"> ( (RBACManagerListener) this.rbacImpl ).rbacInit( freshdb );</a>
<span class="sourceLineNo">772</span><a id="line.772"> }</a>
<span class="sourceLineNo">773</span><a id="line.773"> }</a>
<span class="sourceLineNo">774</span><a id="line.774"></a>
<span class="sourceLineNo">775</span><a id="line.775"> @Override</a>
<span class="sourceLineNo">776</span><a id="line.776"> public void rbacPermissionRemoved( Permission permission )</a>
<span class="sourceLineNo">777</span><a id="line.777"> {</a>
<span class="sourceLineNo">778</span><a id="line.778"> if ( rbacImpl instanceof RBACManagerListener )</a>
<span class="sourceLineNo">779</span><a id="line.779"> {</a>
<span class="sourceLineNo">780</span><a id="line.780"> ( (RBACManagerListener) this.rbacImpl ).rbacPermissionRemoved( permission );</a>
<span class="sourceLineNo">781</span><a id="line.781"> }</a>
<span class="sourceLineNo">782</span><a id="line.782"></a>
<span class="sourceLineNo">783</span><a id="line.783"> }</a>
<span class="sourceLineNo">784</span><a id="line.784"></a>
<span class="sourceLineNo">785</span><a id="line.785"> @Override</a>
<span class="sourceLineNo">786</span><a id="line.786"> public void rbacPermissionSaved( Permission permission )</a>
<span class="sourceLineNo">787</span><a id="line.787"> {</a>
<span class="sourceLineNo">788</span><a id="line.788"> if ( rbacImpl instanceof RBACManagerListener )</a>
<span class="sourceLineNo">789</span><a id="line.789"> {</a>
<span class="sourceLineNo">790</span><a id="line.790"> ( (RBACManagerListener) this.rbacImpl ).rbacPermissionSaved( permission );</a>
<span class="sourceLineNo">791</span><a id="line.791"> }</a>
<span class="sourceLineNo">792</span><a id="line.792"></a>
<span class="sourceLineNo">793</span><a id="line.793"> }</a>
<span class="sourceLineNo">794</span><a id="line.794"></a>
<span class="sourceLineNo">795</span><a id="line.795"> @Override</a>
<span class="sourceLineNo">796</span><a id="line.796"> public void rbacRoleRemoved( Role role )</a>
<span class="sourceLineNo">797</span><a id="line.797"> {</a>
<span class="sourceLineNo">798</span><a id="line.798"> if ( rbacImpl instanceof RBACManagerListener )</a>
<span class="sourceLineNo">799</span><a id="line.799"> {</a>
<span class="sourceLineNo">800</span><a id="line.800"> ( (RBACManagerListener) this.rbacImpl ).rbacRoleRemoved( role );</a>
<span class="sourceLineNo">801</span><a id="line.801"> }</a>
<span class="sourceLineNo">802</span><a id="line.802"></a>
<span class="sourceLineNo">803</span><a id="line.803"> }</a>
<span class="sourceLineNo">804</span><a id="line.804"></a>
<span class="sourceLineNo">805</span><a id="line.805"> @Override</a>
<span class="sourceLineNo">806</span><a id="line.806"> public void rbacRoleSaved( Role role )</a>
<span class="sourceLineNo">807</span><a id="line.807"> {</a>
<span class="sourceLineNo">808</span><a id="line.808"> if ( rbacImpl instanceof RBACManagerListener )</a>
<span class="sourceLineNo">809</span><a id="line.809"> {</a>
<span class="sourceLineNo">810</span><a id="line.810"> ( (RBACManagerListener) this.rbacImpl ).rbacRoleSaved( role );</a>
<span class="sourceLineNo">811</span><a id="line.811"> }</a>
<span class="sourceLineNo">812</span><a id="line.812"></a>
<span class="sourceLineNo">813</span><a id="line.813"> }</a>
<span class="sourceLineNo">814</span><a id="line.814"></a>
<span class="sourceLineNo">815</span><a id="line.815"> @Override</a>
<span class="sourceLineNo">816</span><a id="line.816"> public void rbacUserAssignmentRemoved( UserAssignment userAssignment )</a>
<span class="sourceLineNo">817</span><a id="line.817"> {</a>
<span class="sourceLineNo">818</span><a id="line.818"> if ( rbacImpl instanceof RBACManagerListener )</a>
<span class="sourceLineNo">819</span><a id="line.819"> {</a>
<span class="sourceLineNo">820</span><a id="line.820"> ( (RBACManagerListener) this.rbacImpl ).rbacUserAssignmentRemoved( userAssignment );</a>
<span class="sourceLineNo">821</span><a id="line.821"> }</a>
<span class="sourceLineNo">822</span><a id="line.822"></a>
<span class="sourceLineNo">823</span><a id="line.823"> }</a>
<span class="sourceLineNo">824</span><a id="line.824"></a>
<span class="sourceLineNo">825</span><a id="line.825"> @Override</a>
<span class="sourceLineNo">826</span><a id="line.826"> public void rbacUserAssignmentSaved( UserAssignment userAssignment )</a>
<span class="sourceLineNo">827</span><a id="line.827"> {</a>
<span class="sourceLineNo">828</span><a id="line.828"> if ( rbacImpl instanceof RBACManagerListener )</a>
<span class="sourceLineNo">829</span><a id="line.829"> {</a>
<span class="sourceLineNo">830</span><a id="line.830"> ( (RBACManagerListener) this.rbacImpl ).rbacUserAssignmentSaved( userAssignment );</a>
<span class="sourceLineNo">831</span><a id="line.831"> }</a>
<span class="sourceLineNo">832</span><a id="line.832"></a>
<span class="sourceLineNo">833</span><a id="line.833"> }</a>
<span class="sourceLineNo">834</span><a id="line.834"></a>
<span class="sourceLineNo">835</span><a id="line.835"> @Override</a>
<span class="sourceLineNo">836</span><a id="line.836"> public void removeListener( RBACManagerListener listener )</a>
<span class="sourceLineNo">837</span><a id="line.837"> {</a>
<span class="sourceLineNo">838</span><a id="line.838"> this.rbacImpl.removeListener( listener );</a>
<span class="sourceLineNo">839</span><a id="line.839"> }</a>
<span class="sourceLineNo">840</span><a id="line.840"></a>
<span class="sourceLineNo">841</span><a id="line.841"> @Override</a>
<span class="sourceLineNo">842</span><a id="line.842"> public void removeOperation( Operation operation )</a>
<span class="sourceLineNo">843</span><a id="line.843"> throws RbacManagerException</a>
<span class="sourceLineNo">844</span><a id="line.844"> {</a>
<span class="sourceLineNo">845</span><a id="line.845"> this.rbacImpl.removeOperation( operation );</a>
<span class="sourceLineNo">846</span><a id="line.846"> }</a>
<span class="sourceLineNo">847</span><a id="line.847"></a>
<span class="sourceLineNo">848</span><a id="line.848"> @Override</a>
<span class="sourceLineNo">849</span><a id="line.849"> public void removeOperation( String operationName )</a>
<span class="sourceLineNo">850</span><a id="line.850"> throws RbacManagerException</a>
<span class="sourceLineNo">851</span><a id="line.851"> {</a>
<span class="sourceLineNo">852</span><a id="line.852"> this.rbacImpl.removeOperation( operationName );</a>
<span class="sourceLineNo">853</span><a id="line.853"> }</a>
<span class="sourceLineNo">854</span><a id="line.854"></a>
<span class="sourceLineNo">855</span><a id="line.855"> @Override</a>
<span class="sourceLineNo">856</span><a id="line.856"> public void removePermission( Permission permission )</a>
<span class="sourceLineNo">857</span><a id="line.857"> throws RbacManagerException</a>
<span class="sourceLineNo">858</span><a id="line.858"> {</a>
<span class="sourceLineNo">859</span><a id="line.859"> this.rbacImpl.removePermission( permission );</a>
<span class="sourceLineNo">860</span><a id="line.860"> }</a>
<span class="sourceLineNo">861</span><a id="line.861"></a>
<span class="sourceLineNo">862</span><a id="line.862"> @Override</a>
<span class="sourceLineNo">863</span><a id="line.863"> public void removePermission( String permissionName )</a>
<span class="sourceLineNo">864</span><a id="line.864"> throws RbacManagerException</a>
<span class="sourceLineNo">865</span><a id="line.865"> {</a>
<span class="sourceLineNo">866</span><a id="line.866"> this.rbacImpl.removePermission( permissionName );</a>
<span class="sourceLineNo">867</span><a id="line.867"> }</a>
<span class="sourceLineNo">868</span><a id="line.868"></a>
<span class="sourceLineNo">869</span><a id="line.869"> @Override</a>
<span class="sourceLineNo">870</span><a id="line.870"> public void removeResource( Resource resource )</a>
<span class="sourceLineNo">871</span><a id="line.871"> throws RbacManagerException</a>
<span class="sourceLineNo">872</span><a id="line.872"> {</a>
<span class="sourceLineNo">873</span><a id="line.873"> this.rbacImpl.removeResource( resource );</a>
<span class="sourceLineNo">874</span><a id="line.874"> }</a>
<span class="sourceLineNo">875</span><a id="line.875"></a>
<span class="sourceLineNo">876</span><a id="line.876"> @Override</a>
<span class="sourceLineNo">877</span><a id="line.877"> public void removeResource( String resourceIdentifier )</a>
<span class="sourceLineNo">878</span><a id="line.878"> throws RbacManagerException</a>
<span class="sourceLineNo">879</span><a id="line.879"> {</a>
<span class="sourceLineNo">880</span><a id="line.880"> this.rbacImpl.removeResource( resourceIdentifier );</a>
<span class="sourceLineNo">881</span><a id="line.881"> }</a>
<span class="sourceLineNo">882</span><a id="line.882"></a>
<span class="sourceLineNo">883</span><a id="line.883"> @Override</a>
<span class="sourceLineNo">884</span><a id="line.884"> public void removeRole( Role role )</a>
<span class="sourceLineNo">885</span><a id="line.885"> throws RbacManagerException</a>
<span class="sourceLineNo">886</span><a id="line.886"> {</a>
<span class="sourceLineNo">887</span><a id="line.887"> RBACObjectAssertions.assertValid( role );</a>
<span class="sourceLineNo">888</span><a id="line.888"></a>
<span class="sourceLineNo">889</span><a id="line.889"> if ( role.isPermanent() )</a>
<span class="sourceLineNo">890</span><a id="line.890"> {</a>
<span class="sourceLineNo">891</span><a id="line.891"> throw new RbacPermanentException( "Unable to delete permanent role [" + role.getName() + "]" );</a>
<span class="sourceLineNo">892</span><a id="line.892"> }</a>
<span class="sourceLineNo">893</span><a id="line.893"> rolesCache.remove( role.getName() );</a>
<span class="sourceLineNo">894</span><a id="line.894"> if ( writableLdap )</a>
<span class="sourceLineNo">895</span><a id="line.895"> {</a>
<span class="sourceLineNo">896</span><a id="line.896"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">897</span><a id="line.897"> DirContext context = null;</a>
<span class="sourceLineNo">898</span><a id="line.898"> try</a>
<span class="sourceLineNo">899</span><a id="line.899"> {</a>
<span class="sourceLineNo">900</span><a id="line.900"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">901</span><a id="line.901"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">902</span><a id="line.902"> ldapRoleMapper.removeRole( role.getName(), context );</a>
<span class="sourceLineNo">903</span><a id="line.903"> }</a>
<span class="sourceLineNo">904</span><a id="line.904"> catch ( MappingException e )</a>
<span class="sourceLineNo">905</span><a id="line.905"> {</a>
<span class="sourceLineNo">906</span><a id="line.906"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">907</span><a id="line.907"> }</a>
<span class="sourceLineNo">908</span><a id="line.908"> catch ( LdapException e )</a>
<span class="sourceLineNo">909</span><a id="line.909"> {</a>
<span class="sourceLineNo">910</span><a id="line.910"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">911</span><a id="line.911"> } finally {</a>
<span class="sourceLineNo">912</span><a id="line.912"> closeContext( context );</a>
<span class="sourceLineNo">913</span><a id="line.913"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">914</span><a id="line.914"> }</a>
<span class="sourceLineNo">915</span><a id="line.915"> fireRbacRoleRemoved( role );</a>
<span class="sourceLineNo">916</span><a id="line.916"> }</a>
<span class="sourceLineNo">917</span><a id="line.917"> }</a>
<span class="sourceLineNo">918</span><a id="line.918"></a>
<span class="sourceLineNo">919</span><a id="line.919"> @Override</a>
<span class="sourceLineNo">920</span><a id="line.920"> public void removeRole( String roleName )</a>
<span class="sourceLineNo">921</span><a id="line.921"> throws RbacManagerException</a>
<span class="sourceLineNo">922</span><a id="line.922"> {</a>
<span class="sourceLineNo">923</span><a id="line.923"> if ( roleName == null )</a>
<span class="sourceLineNo">924</span><a id="line.924"> {</a>
<span class="sourceLineNo">925</span><a id="line.925"> return;</a>
<span class="sourceLineNo">926</span><a id="line.926"> }</a>
<span class="sourceLineNo">927</span><a id="line.927"> removeRole( new RoleImpl( roleName ) );</a>
<span class="sourceLineNo">928</span><a id="line.928"> }</a>
<span class="sourceLineNo">929</span><a id="line.929"></a>
<span class="sourceLineNo">930</span><a id="line.930"> @Override</a>
<span class="sourceLineNo">931</span><a id="line.931"> public void removeUserAssignment( String username )</a>
<span class="sourceLineNo">932</span><a id="line.932"> throws RbacManagerException</a>
<span class="sourceLineNo">933</span><a id="line.933"> {</a>
<span class="sourceLineNo">934</span><a id="line.934"> // TODO ldap cannot or isWritable ldap ?</a>
<span class="sourceLineNo">935</span><a id="line.935"> userAssignmentsCache.remove( username );</a>
<span class="sourceLineNo">936</span><a id="line.936"> this.rbacImpl.removeUserAssignment( username );</a>
<span class="sourceLineNo">937</span><a id="line.937"> }</a>
<span class="sourceLineNo">938</span><a id="line.938"></a>
<span class="sourceLineNo">939</span><a id="line.939"> @Override</a>
<span class="sourceLineNo">940</span><a id="line.940"> public void removeUserAssignment( UserAssignment userAssignment )</a>
<span class="sourceLineNo">941</span><a id="line.941"> throws RbacManagerException</a>
<span class="sourceLineNo">942</span><a id="line.942"> {</a>
<span class="sourceLineNo">943</span><a id="line.943"> if ( userAssignment != null )</a>
<span class="sourceLineNo">944</span><a id="line.944"> {</a>
<span class="sourceLineNo">945</span><a id="line.945"> userAssignmentsCache.remove( userAssignment.getPrincipal() );</a>
<span class="sourceLineNo">946</span><a id="line.946"> }</a>
<span class="sourceLineNo">947</span><a id="line.947"> // TODO ldap cannot or isWritable ldap ?</a>
<span class="sourceLineNo">948</span><a id="line.948"> this.rbacImpl.removeUserAssignment( userAssignment );</a>
<span class="sourceLineNo">949</span><a id="line.949"> }</a>
<span class="sourceLineNo">950</span><a id="line.950"></a>
<span class="sourceLineNo">951</span><a id="line.951"> @Override</a>
<span class="sourceLineNo">952</span><a id="line.952"> public boolean resourceExists( Resource resource )</a>
<span class="sourceLineNo">953</span><a id="line.953"> {</a>
<span class="sourceLineNo">954</span><a id="line.954"> return this.rbacImpl.resourceExists( resource );</a>
<span class="sourceLineNo">955</span><a id="line.955"> }</a>
<span class="sourceLineNo">956</span><a id="line.956"></a>
<span class="sourceLineNo">957</span><a id="line.957"> @Override</a>
<span class="sourceLineNo">958</span><a id="line.958"> public boolean resourceExists( String identifier )</a>
<span class="sourceLineNo">959</span><a id="line.959"> {</a>
<span class="sourceLineNo">960</span><a id="line.960"> return this.rbacImpl.resourceExists( identifier );</a>
<span class="sourceLineNo">961</span><a id="line.961"> }</a>
<span class="sourceLineNo">962</span><a id="line.962"></a>
<span class="sourceLineNo">963</span><a id="line.963"> @Override</a>
<span class="sourceLineNo">964</span><a id="line.964"> public boolean roleExists( Role role )</a>
<span class="sourceLineNo">965</span><a id="line.965"> throws RbacManagerException</a>
<span class="sourceLineNo">966</span><a id="line.966"> {</a>
<span class="sourceLineNo">967</span><a id="line.967"> if ( role == null )</a>
<span class="sourceLineNo">968</span><a id="line.968"> {</a>
<span class="sourceLineNo">969</span><a id="line.969"> return false;</a>
<span class="sourceLineNo">970</span><a id="line.970"> }</a>
<span class="sourceLineNo">971</span><a id="line.971"> return roleExists( role.getName() );</a>
<span class="sourceLineNo">972</span><a id="line.972"> }</a>
<span class="sourceLineNo">973</span><a id="line.973"></a>
<span class="sourceLineNo">974</span><a id="line.974"> @Override</a>
<span class="sourceLineNo">975</span><a id="line.975"> public boolean roleExists( String name )</a>
<span class="sourceLineNo">976</span><a id="line.976"> throws RbacManagerException</a>
<span class="sourceLineNo">977</span><a id="line.977"> {</a>
<span class="sourceLineNo">978</span><a id="line.978"> if ( StringUtils.isEmpty( name ) )</a>
<span class="sourceLineNo">979</span><a id="line.979"> {</a>
<span class="sourceLineNo">980</span><a id="line.980"> return false;</a>
<span class="sourceLineNo">981</span><a id="line.981"> }</a>
<span class="sourceLineNo">982</span><a id="line.982"> if ( rolesCache.get( name ) != null )</a>
<span class="sourceLineNo">983</span><a id="line.983"> {</a>
<span class="sourceLineNo">984</span><a id="line.984"> return true;</a>
<span class="sourceLineNo">985</span><a id="line.985"> }</a>
<span class="sourceLineNo">986</span><a id="line.986"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">987</span><a id="line.987"> DirContext context = null;</a>
<span class="sourceLineNo">988</span><a id="line.988"> try</a>
<span class="sourceLineNo">989</span><a id="line.989"> {</a>
<span class="sourceLineNo">990</span><a id="line.990"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">991</span><a id="line.991"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">992</span><a id="line.992"> if ( rolesCache.hasKey( name ) )</a>
<span class="sourceLineNo">993</span><a id="line.993"> {</a>
<span class="sourceLineNo">994</span><a id="line.994"> return true;</a>
<span class="sourceLineNo">995</span><a id="line.995"> }</a>
<span class="sourceLineNo">996</span><a id="line.996"> return ldapRoleMapper.hasRole( context, name );</a>
<span class="sourceLineNo">997</span><a id="line.997"> }</a>
<span class="sourceLineNo">998</span><a id="line.998"> catch ( MappingException e )</a>
<span class="sourceLineNo">999</span><a id="line.999"> {</a>
<span class="sourceLineNo">1000</span><a id="line.1000"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1001</span><a id="line.1001"> }</a>
<span class="sourceLineNo">1002</span><a id="line.1002"> catch ( LdapException e )</a>
<span class="sourceLineNo">1003</span><a id="line.1003"> {</a>
<span class="sourceLineNo">1004</span><a id="line.1004"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1005</span><a id="line.1005"> }</a>
<span class="sourceLineNo">1006</span><a id="line.1006"> finally</a>
<span class="sourceLineNo">1007</span><a id="line.1007"> {</a>
<span class="sourceLineNo">1008</span><a id="line.1008"> closeContext( context );</a>
<span class="sourceLineNo">1009</span><a id="line.1009"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">1010</span><a id="line.1010"> }</a>
<span class="sourceLineNo">1011</span><a id="line.1011"> }</a>
<span class="sourceLineNo">1012</span><a id="line.1012"></a>
<span class="sourceLineNo">1013</span><a id="line.1013"> @Override</a>
<span class="sourceLineNo">1014</span><a id="line.1014"> public boolean roleExistsById( String id ) throws RbacManagerException</a>
<span class="sourceLineNo">1015</span><a id="line.1015"> {</a>
<span class="sourceLineNo">1016</span><a id="line.1016"> Role role = rbacImpl.getRoleById( id );</a>
<span class="sourceLineNo">1017</span><a id="line.1017"> if (role==null) {</a>
<span class="sourceLineNo">1018</span><a id="line.1018"> return false;</a>
<span class="sourceLineNo">1019</span><a id="line.1019"> } else {</a>
<span class="sourceLineNo">1020</span><a id="line.1020"> return roleExists( role.getName() );</a>
<span class="sourceLineNo">1021</span><a id="line.1021"> }</a>
<span class="sourceLineNo">1022</span><a id="line.1022"> }</a>
<span class="sourceLineNo">1023</span><a id="line.1023"></a>
<span class="sourceLineNo">1024</span><a id="line.1024"> @Override</a>
<span class="sourceLineNo">1025</span><a id="line.1025"> public Operation saveOperation( Operation operation )</a>
<span class="sourceLineNo">1026</span><a id="line.1026"> throws RbacManagerException</a>
<span class="sourceLineNo">1027</span><a id="line.1027"> {</a>
<span class="sourceLineNo">1028</span><a id="line.1028"> return this.rbacImpl.saveOperation( operation );</a>
<span class="sourceLineNo">1029</span><a id="line.1029"> }</a>
<span class="sourceLineNo">1030</span><a id="line.1030"></a>
<span class="sourceLineNo">1031</span><a id="line.1031"> @Override</a>
<span class="sourceLineNo">1032</span><a id="line.1032"> public Permission savePermission( Permission permission )</a>
<span class="sourceLineNo">1033</span><a id="line.1033"> throws RbacManagerException</a>
<span class="sourceLineNo">1034</span><a id="line.1034"> {</a>
<span class="sourceLineNo">1035</span><a id="line.1035"> return this.rbacImpl.savePermission( permission );</a>
<span class="sourceLineNo">1036</span><a id="line.1036"> }</a>
<span class="sourceLineNo">1037</span><a id="line.1037"></a>
<span class="sourceLineNo">1038</span><a id="line.1038"> @Override</a>
<span class="sourceLineNo">1039</span><a id="line.1039"> public Resource saveResource( Resource resource )</a>
<span class="sourceLineNo">1040</span><a id="line.1040"> throws RbacManagerException</a>
<span class="sourceLineNo">1041</span><a id="line.1041"> {</a>
<span class="sourceLineNo">1042</span><a id="line.1042"> return this.rbacImpl.saveResource( resource );</a>
<span class="sourceLineNo">1043</span><a id="line.1043"> }</a>
<span class="sourceLineNo">1044</span><a id="line.1044"></a>
<span class="sourceLineNo">1045</span><a id="line.1045"> @Override</a>
<span class="sourceLineNo">1046</span><a id="line.1046"> public synchronized Role saveRole( Role role )</a>
<span class="sourceLineNo">1047</span><a id="line.1047"> throws RbacManagerException</a>
<span class="sourceLineNo">1048</span><a id="line.1048"> {</a>
<span class="sourceLineNo">1049</span><a id="line.1049"> if ( writableLdap )</a>
<span class="sourceLineNo">1050</span><a id="line.1050"> {</a>
<span class="sourceLineNo">1051</span><a id="line.1051"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">1052</span><a id="line.1052"> DirContext context = null;</a>
<span class="sourceLineNo">1053</span><a id="line.1053"> try</a>
<span class="sourceLineNo">1054</span><a id="line.1054"> {</a>
<span class="sourceLineNo">1055</span><a id="line.1055"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">1056</span><a id="line.1056"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">1057</span><a id="line.1057"> ldapRoleMapper.saveRole( role.getName(), context );</a>
<span class="sourceLineNo">1058</span><a id="line.1058"></a>
<span class="sourceLineNo">1059</span><a id="line.1059"> if ( !role.getChildRoleNames().isEmpty() )</a>
<span class="sourceLineNo">1060</span><a id="line.1060"> {</a>
<span class="sourceLineNo">1061</span><a id="line.1061"> for ( String roleName : role.getChildRoleNames() )</a>
<span class="sourceLineNo">1062</span><a id="line.1062"> {</a>
<span class="sourceLineNo">1063</span><a id="line.1063"> ldapRoleMapper.saveRole( roleName, context );</a>
<span class="sourceLineNo">1064</span><a id="line.1064"> }</a>
<span class="sourceLineNo">1065</span><a id="line.1065"> }</a>
<span class="sourceLineNo">1066</span><a id="line.1066"> fireRbacRoleSaved( role );</a>
<span class="sourceLineNo">1067</span><a id="line.1067"> }</a>
<span class="sourceLineNo">1068</span><a id="line.1068"> catch ( MappingException e )</a>
<span class="sourceLineNo">1069</span><a id="line.1069"> {</a>
<span class="sourceLineNo">1070</span><a id="line.1070"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1071</span><a id="line.1071"> }</a>
<span class="sourceLineNo">1072</span><a id="line.1072"> catch ( LdapException e )</a>
<span class="sourceLineNo">1073</span><a id="line.1073"> {</a>
<span class="sourceLineNo">1074</span><a id="line.1074"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1075</span><a id="line.1075"> }</a>
<span class="sourceLineNo">1076</span><a id="line.1076"> }</a>
<span class="sourceLineNo">1077</span><a id="line.1077"> role = this.rbacImpl.saveRole( role );</a>
<span class="sourceLineNo">1078</span><a id="line.1078"> rolesCache.put( role.getName(), role );</a>
<span class="sourceLineNo">1079</span><a id="line.1079"></a>
<span class="sourceLineNo">1080</span><a id="line.1080"> return role;</a>
<span class="sourceLineNo">1081</span><a id="line.1081"> //return new RoleImpl( role.getName(), role.getPermissions() );</a>
<span class="sourceLineNo">1082</span><a id="line.1082"> }</a>
<span class="sourceLineNo">1083</span><a id="line.1083"></a>
<span class="sourceLineNo">1084</span><a id="line.1084"> @Override</a>
<span class="sourceLineNo">1085</span><a id="line.1085"> public synchronized void saveRoles( Collection&lt;Role&gt; roles )</a>
<span class="sourceLineNo">1086</span><a id="line.1086"> throws RbacManagerException</a>
<span class="sourceLineNo">1087</span><a id="line.1087"> {</a>
<span class="sourceLineNo">1088</span><a id="line.1088"> if ( writableLdap )</a>
<span class="sourceLineNo">1089</span><a id="line.1089"> {</a>
<span class="sourceLineNo">1090</span><a id="line.1090"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">1091</span><a id="line.1091"> DirContext context = null;</a>
<span class="sourceLineNo">1092</span><a id="line.1092"> try</a>
<span class="sourceLineNo">1093</span><a id="line.1093"> {</a>
<span class="sourceLineNo">1094</span><a id="line.1094"></a>
<span class="sourceLineNo">1095</span><a id="line.1095"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">1096</span><a id="line.1096"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">1097</span><a id="line.1097"> for ( Role role : roles )</a>
<span class="sourceLineNo">1098</span><a id="line.1098"> {</a>
<span class="sourceLineNo">1099</span><a id="line.1099"> ldapRoleMapper.saveRole( role.getName(), context );</a>
<span class="sourceLineNo">1100</span><a id="line.1100"> fireRbacRoleSaved( role );</a>
<span class="sourceLineNo">1101</span><a id="line.1101"> }</a>
<span class="sourceLineNo">1102</span><a id="line.1102"> }</a>
<span class="sourceLineNo">1103</span><a id="line.1103"> catch ( MappingException e )</a>
<span class="sourceLineNo">1104</span><a id="line.1104"> {</a>
<span class="sourceLineNo">1105</span><a id="line.1105"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1106</span><a id="line.1106"> }</a>
<span class="sourceLineNo">1107</span><a id="line.1107"> catch ( LdapException e )</a>
<span class="sourceLineNo">1108</span><a id="line.1108"> {</a>
<span class="sourceLineNo">1109</span><a id="line.1109"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1110</span><a id="line.1110"> }</a>
<span class="sourceLineNo">1111</span><a id="line.1111"> }</a>
<span class="sourceLineNo">1112</span><a id="line.1112"> this.rbacImpl.saveRoles( roles );</a>
<span class="sourceLineNo">1113</span><a id="line.1113"></a>
<span class="sourceLineNo">1114</span><a id="line.1114"> }</a>
<span class="sourceLineNo">1115</span><a id="line.1115"></a>
<span class="sourceLineNo">1116</span><a id="line.1116"> @Override</a>
<span class="sourceLineNo">1117</span><a id="line.1117"> public UserAssignment saveUserAssignment( UserAssignment userAssignment )</a>
<span class="sourceLineNo">1118</span><a id="line.1118"> throws RbacManagerException</a>
<span class="sourceLineNo">1119</span><a id="line.1119"> {</a>
<span class="sourceLineNo">1120</span><a id="line.1120"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">1121</span><a id="line.1121"> DirContext context = null;</a>
<span class="sourceLineNo">1122</span><a id="line.1122"> try</a>
<span class="sourceLineNo">1123</span><a id="line.1123"> {</a>
<span class="sourceLineNo">1124</span><a id="line.1124"> if ( !userManager.userExists( userAssignment.getPrincipal() ) )</a>
<span class="sourceLineNo">1125</span><a id="line.1125"> {</a>
<span class="sourceLineNo">1126</span><a id="line.1126"> User user = userManager.createUser( userAssignment.getPrincipal(), null, null );</a>
<span class="sourceLineNo">1127</span><a id="line.1127"> userManager.addUser( user );</a>
<span class="sourceLineNo">1128</span><a id="line.1128"> }</a>
<span class="sourceLineNo">1129</span><a id="line.1129"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">1130</span><a id="line.1130"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">1131</span><a id="line.1131"> List&lt;String&gt; allRoles = ldapRoleMapper.getAllRoles( context );</a>
<span class="sourceLineNo">1132</span><a id="line.1132"></a>
<span class="sourceLineNo">1133</span><a id="line.1133"> List&lt;String&gt; currentUserRoles =</a>
<span class="sourceLineNo">1134</span><a id="line.1134"> ldapRoleMapper.getRoles( userAssignment.getPrincipal(), context, getRealRoles() );</a>
<span class="sourceLineNo">1135</span><a id="line.1135"> Map&lt;String, String&gt; currentUserIds = currentUserRoles.stream( ).map( roleName -&gt; {</a>
<span class="sourceLineNo">1136</span><a id="line.1136"> try</a>
<span class="sourceLineNo">1137</span><a id="line.1137"> {</a>
<span class="sourceLineNo">1138</span><a id="line.1138"> return Optional.of( rbacImpl.getRole( roleName ) );</a>
<span class="sourceLineNo">1139</span><a id="line.1139"> }</a>
<span class="sourceLineNo">1140</span><a id="line.1140"> catch ( RbacManagerException e )</a>
<span class="sourceLineNo">1141</span><a id="line.1141"> {</a>
<span class="sourceLineNo">1142</span><a id="line.1142"> return Optional.&lt;Role&gt;empty( );</a>
<span class="sourceLineNo">1143</span><a id="line.1143"> }</a>
<span class="sourceLineNo">1144</span><a id="line.1144"> } ).filter( Optional::isPresent ).map(Optional::get)</a>
<span class="sourceLineNo">1145</span><a id="line.1145"> .collect( Collectors.toMap( Role::getName, Role::getId ) );</a>
<span class="sourceLineNo">1146</span><a id="line.1146"></a>
<span class="sourceLineNo">1147</span><a id="line.1147"> for ( String roleId : userAssignment.getRoleIds() )</a>
<span class="sourceLineNo">1148</span><a id="line.1148"> {</a>
<span class="sourceLineNo">1149</span><a id="line.1149"> Role rbacRole = rbacImpl.getRoleById( roleId );</a>
<span class="sourceLineNo">1150</span><a id="line.1150"> String roleName = rbacRole.getName( );</a>
<span class="sourceLineNo">1151</span><a id="line.1151"> if ( !currentUserRoles.contains( roleName ) &amp;&amp; writableLdap )</a>
<span class="sourceLineNo">1152</span><a id="line.1152"> {</a>
<span class="sourceLineNo">1153</span><a id="line.1153"> // role exists in ldap ?</a>
<span class="sourceLineNo">1154</span><a id="line.1154"> if ( !allRoles.contains( roleName ) )</a>
<span class="sourceLineNo">1155</span><a id="line.1155"> {</a>
<span class="sourceLineNo">1156</span><a id="line.1156"> ldapRoleMapper.saveRole( roleName, context );</a>
<span class="sourceLineNo">1157</span><a id="line.1157"> allRoles.add( roleName );</a>
<span class="sourceLineNo">1158</span><a id="line.1158"> }</a>
<span class="sourceLineNo">1159</span><a id="line.1159"> ldapRoleMapper.saveUserRole( roleName, userAssignment.getPrincipal(), context );</a>
<span class="sourceLineNo">1160</span><a id="line.1160"> currentUserRoles.add( roleName );</a>
<span class="sourceLineNo">1161</span><a id="line.1161"> currentUserIds.put( roleName, rbacRole.getId( ) );</a>
<span class="sourceLineNo">1162</span><a id="line.1162"> }</a>
<span class="sourceLineNo">1163</span><a id="line.1163"> }</a>
<span class="sourceLineNo">1164</span><a id="line.1164"></a>
<span class="sourceLineNo">1165</span><a id="line.1165"> for ( String roleName : currentUserRoles )</a>
<span class="sourceLineNo">1166</span><a id="line.1166"> {</a>
<span class="sourceLineNo">1167</span><a id="line.1167"> if ( !userAssignment.getRoleIds().contains( currentUserIds.get(roleName) ) &amp;&amp; writableLdap )</a>
<span class="sourceLineNo">1168</span><a id="line.1168"> {</a>
<span class="sourceLineNo">1169</span><a id="line.1169"> ldapRoleMapper.removeUserRole( roleName, userAssignment.getPrincipal(), context );</a>
<span class="sourceLineNo">1170</span><a id="line.1170"> }</a>
<span class="sourceLineNo">1171</span><a id="line.1171"> }</a>
<span class="sourceLineNo">1172</span><a id="line.1172"></a>
<span class="sourceLineNo">1173</span><a id="line.1173"> userAssignmentsCache.put( userAssignment.getPrincipal(), userAssignment );</a>
<span class="sourceLineNo">1174</span><a id="line.1174"> return userAssignment;</a>
<span class="sourceLineNo">1175</span><a id="line.1175"> }</a>
<span class="sourceLineNo">1176</span><a id="line.1176"> catch ( UserManagerException e )</a>
<span class="sourceLineNo">1177</span><a id="line.1177"> {</a>
<span class="sourceLineNo">1178</span><a id="line.1178"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1179</span><a id="line.1179"> }</a>
<span class="sourceLineNo">1180</span><a id="line.1180"> catch ( MappingException e )</a>
<span class="sourceLineNo">1181</span><a id="line.1181"> {</a>
<span class="sourceLineNo">1182</span><a id="line.1182"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1183</span><a id="line.1183"> }</a>
<span class="sourceLineNo">1184</span><a id="line.1184"> catch ( LdapException e )</a>
<span class="sourceLineNo">1185</span><a id="line.1185"> {</a>
<span class="sourceLineNo">1186</span><a id="line.1186"> throw new RbacManagerException( e.getMessage(), e );</a>
<span class="sourceLineNo">1187</span><a id="line.1187"> }</a>
<span class="sourceLineNo">1188</span><a id="line.1188"> finally</a>
<span class="sourceLineNo">1189</span><a id="line.1189"> {</a>
<span class="sourceLineNo">1190</span><a id="line.1190"> closeContext( context );</a>
<span class="sourceLineNo">1191</span><a id="line.1191"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">1192</span><a id="line.1192"> }</a>
<span class="sourceLineNo">1193</span><a id="line.1193"> }</a>
<span class="sourceLineNo">1194</span><a id="line.1194"></a>
<span class="sourceLineNo">1195</span><a id="line.1195"> @Override</a>
<span class="sourceLineNo">1196</span><a id="line.1196"> public boolean userAssignmentExists( String principal )</a>
<span class="sourceLineNo">1197</span><a id="line.1197"> {</a>
<span class="sourceLineNo">1198</span><a id="line.1198"> if ( userAssignmentsCache.hasKey( principal ) )</a>
<span class="sourceLineNo">1199</span><a id="line.1199"> {</a>
<span class="sourceLineNo">1200</span><a id="line.1200"> return true;</a>
<span class="sourceLineNo">1201</span><a id="line.1201"> }</a>
<span class="sourceLineNo">1202</span><a id="line.1202"> LdapConnection ldapConnection = null;</a>
<span class="sourceLineNo">1203</span><a id="line.1203"> DirContext context = null;</a>
<span class="sourceLineNo">1204</span><a id="line.1204"> try</a>
<span class="sourceLineNo">1205</span><a id="line.1205"> {</a>
<span class="sourceLineNo">1206</span><a id="line.1206"> ldapConnection = ldapConnectionFactory.getConnection();</a>
<span class="sourceLineNo">1207</span><a id="line.1207"> context = ldapConnection.getDirContext();</a>
<span class="sourceLineNo">1208</span><a id="line.1208"> List&lt;String&gt; roles = ldapRoleMapper.getRoles( principal, context, getRealRoles() );</a>
<span class="sourceLineNo">1209</span><a id="line.1209"> if ( roles == null || roles.isEmpty() )</a>
<span class="sourceLineNo">1210</span><a id="line.1210"> {</a>
<span class="sourceLineNo">1211</span><a id="line.1211"> return false;</a>
<span class="sourceLineNo">1212</span><a id="line.1212"> }</a>
<span class="sourceLineNo">1213</span><a id="line.1213"> return true;</a>
<span class="sourceLineNo">1214</span><a id="line.1214"> }</a>
<span class="sourceLineNo">1215</span><a id="line.1215"> catch ( RbacManagerException e )</a>
<span class="sourceLineNo">1216</span><a id="line.1216"> {</a>
<span class="sourceLineNo">1217</span><a id="line.1217"> log.warn( "fail to call userAssignmentExists: {}", e.getMessage() );</a>
<span class="sourceLineNo">1218</span><a id="line.1218"> }</a>
<span class="sourceLineNo">1219</span><a id="line.1219"> catch ( LdapException e )</a>
<span class="sourceLineNo">1220</span><a id="line.1220"> {</a>
<span class="sourceLineNo">1221</span><a id="line.1221"> log.warn( "fail to call userAssignmentExists: {}", e.getMessage() );</a>
<span class="sourceLineNo">1222</span><a id="line.1222"> }</a>
<span class="sourceLineNo">1223</span><a id="line.1223"> catch ( MappingException e )</a>
<span class="sourceLineNo">1224</span><a id="line.1224"> {</a>
<span class="sourceLineNo">1225</span><a id="line.1225"> log.warn( "fail to call userAssignmentExists: {}", e.getMessage() );</a>
<span class="sourceLineNo">1226</span><a id="line.1226"> }</a>
<span class="sourceLineNo">1227</span><a id="line.1227"> finally</a>
<span class="sourceLineNo">1228</span><a id="line.1228"> {</a>
<span class="sourceLineNo">1229</span><a id="line.1229"> closeContext( context );</a>
<span class="sourceLineNo">1230</span><a id="line.1230"> closeLdapConnection( ldapConnection );</a>
<span class="sourceLineNo">1231</span><a id="line.1231"> }</a>
<span class="sourceLineNo">1232</span><a id="line.1232"> return false;</a>
<span class="sourceLineNo">1233</span><a id="line.1233"> }</a>
<span class="sourceLineNo">1234</span><a id="line.1234"></a>
<span class="sourceLineNo">1235</span><a id="line.1235"> @Override</a>
<span class="sourceLineNo">1236</span><a id="line.1236"> public boolean userAssignmentExists( UserAssignment assignment )</a>
<span class="sourceLineNo">1237</span><a id="line.1237"> {</a>
<span class="sourceLineNo">1238</span><a id="line.1238"> if ( assignment == null )</a>
<span class="sourceLineNo">1239</span><a id="line.1239"> {</a>
<span class="sourceLineNo">1240</span><a id="line.1240"> return false;</a>
<span class="sourceLineNo">1241</span><a id="line.1241"> }</a>
<span class="sourceLineNo">1242</span><a id="line.1242"> return this.userAssignmentExists( assignment.getPrincipal() );</a>
<span class="sourceLineNo">1243</span><a id="line.1243"> }</a>
<span class="sourceLineNo">1244</span><a id="line.1244"></a>
<span class="sourceLineNo">1245</span><a id="line.1245"> public RBACManager getRbacImpl()</a>
<span class="sourceLineNo">1246</span><a id="line.1246"> {</a>
<span class="sourceLineNo">1247</span><a id="line.1247"> return rbacImpl;</a>
<span class="sourceLineNo">1248</span><a id="line.1248"> }</a>
<span class="sourceLineNo">1249</span><a id="line.1249"></a>
<span class="sourceLineNo">1250</span><a id="line.1250"> public void setRbacImpl( RBACManager rbacImpl )</a>
<span class="sourceLineNo">1251</span><a id="line.1251"> {</a>
<span class="sourceLineNo">1252</span><a id="line.1252"> this.rbacImpl = rbacImpl;</a>
<span class="sourceLineNo">1253</span><a id="line.1253"> }</a>
<span class="sourceLineNo">1254</span><a id="line.1254"></a>
<span class="sourceLineNo">1255</span><a id="line.1255"> public boolean isWritableLdap()</a>
<span class="sourceLineNo">1256</span><a id="line.1256"> {</a>
<span class="sourceLineNo">1257</span><a id="line.1257"> return writableLdap;</a>
<span class="sourceLineNo">1258</span><a id="line.1258"> }</a>
<span class="sourceLineNo">1259</span><a id="line.1259"></a>
<span class="sourceLineNo">1260</span><a id="line.1260"> public void setWritableLdap( boolean writableLdap )</a>
<span class="sourceLineNo">1261</span><a id="line.1261"> {</a>
<span class="sourceLineNo">1262</span><a id="line.1262"> this.writableLdap = writableLdap;</a>
<span class="sourceLineNo">1263</span><a id="line.1263"> }</a>
<span class="sourceLineNo">1264</span><a id="line.1264"></a>
<span class="sourceLineNo">1265</span><a id="line.1265"> public LdapRoleMapper getLdapRoleMapper()</a>
<span class="sourceLineNo">1266</span><a id="line.1266"> {</a>
<span class="sourceLineNo">1267</span><a id="line.1267"> return ldapRoleMapper;</a>
<span class="sourceLineNo">1268</span><a id="line.1268"> }</a>
<span class="sourceLineNo">1269</span><a id="line.1269"></a>
<span class="sourceLineNo">1270</span><a id="line.1270"> public void setLdapRoleMapper( LdapRoleMapper ldapRoleMapper )</a>
<span class="sourceLineNo">1271</span><a id="line.1271"> {</a>
<span class="sourceLineNo">1272</span><a id="line.1272"> this.ldapRoleMapper = ldapRoleMapper;</a>
<span class="sourceLineNo">1273</span><a id="line.1273"> }</a>
<span class="sourceLineNo">1274</span><a id="line.1274"></a>
<span class="sourceLineNo">1275</span><a id="line.1275"> private static class RoleImpl</a>
<span class="sourceLineNo">1276</span><a id="line.1276"> extends AbstractRole</a>
<span class="sourceLineNo">1277</span><a id="line.1277"> {</a>
<span class="sourceLineNo">1278</span><a id="line.1278"> private String name;</a>
<span class="sourceLineNo">1279</span><a id="line.1279"></a>
<span class="sourceLineNo">1280</span><a id="line.1280"> private String description;</a>
<span class="sourceLineNo">1281</span><a id="line.1281"> private String id="";</a>
<span class="sourceLineNo">1282</span><a id="line.1282"> private String modelId="";</a>
<span class="sourceLineNo">1283</span><a id="line.1283"> private boolean isTemplateInstance=false;</a>
<span class="sourceLineNo">1284</span><a id="line.1284"> private String resource="";</a>
<span class="sourceLineNo">1285</span><a id="line.1285"></a>
<span class="sourceLineNo">1286</span><a id="line.1286"> private List&lt;Permission&gt; permissions = new ArrayList&lt;&gt;();</a>
<span class="sourceLineNo">1287</span><a id="line.1287"></a>
<span class="sourceLineNo">1288</span><a id="line.1288"> private List&lt;String&gt; childRoleNames = new ArrayList&lt;&gt;();</a>
<span class="sourceLineNo">1289</span><a id="line.1289"> private List&lt;String&gt; childRoleIds = new ArrayList&lt;&gt;( );</a>
<span class="sourceLineNo">1290</span><a id="line.1290"></a>
<span class="sourceLineNo">1291</span><a id="line.1291"> private RoleImpl( String name )</a>
<span class="sourceLineNo">1292</span><a id="line.1292"> {</a>
<span class="sourceLineNo">1293</span><a id="line.1293"> this.name = name;</a>
<span class="sourceLineNo">1294</span><a id="line.1294"> this.id = name;</a>
<span class="sourceLineNo">1295</span><a id="line.1295"> }</a>
<span class="sourceLineNo">1296</span><a id="line.1296"></a>
<span class="sourceLineNo">1297</span><a id="line.1297"> private RoleImpl(String id, String name) {</a>
<span class="sourceLineNo">1298</span><a id="line.1298"> this.id = id;</a>
<span class="sourceLineNo">1299</span><a id="line.1299"> this.name = name;</a>
<span class="sourceLineNo">1300</span><a id="line.1300"> }</a>
<span class="sourceLineNo">1301</span><a id="line.1301"></a>
<span class="sourceLineNo">1302</span><a id="line.1302"> private RoleImpl( String name, List&lt;Permission&gt; permissions )</a>
<span class="sourceLineNo">1303</span><a id="line.1303"> {</a>
<span class="sourceLineNo">1304</span><a id="line.1304"> this.name = name;</a>
<span class="sourceLineNo">1305</span><a id="line.1305"> this.permissions = permissions;</a>
<span class="sourceLineNo">1306</span><a id="line.1306"> }</a>
<span class="sourceLineNo">1307</span><a id="line.1307"></a>
<span class="sourceLineNo">1308</span><a id="line.1308"> @Override</a>
<span class="sourceLineNo">1309</span><a id="line.1309"> public void addPermission( Permission permission )</a>
<span class="sourceLineNo">1310</span><a id="line.1310"> {</a>
<span class="sourceLineNo">1311</span><a id="line.1311"> this.permissions.add( permission );</a>
<span class="sourceLineNo">1312</span><a id="line.1312"> }</a>
<span class="sourceLineNo">1313</span><a id="line.1313"></a>
<span class="sourceLineNo">1314</span><a id="line.1314"> @Override</a>
<span class="sourceLineNo">1315</span><a id="line.1315"> public void addChildRoleName( String name )</a>
<span class="sourceLineNo">1316</span><a id="line.1316"> {</a>
<span class="sourceLineNo">1317</span><a id="line.1317"> this.childRoleNames.add( name );</a>
<span class="sourceLineNo">1318</span><a id="line.1318"> }</a>
<span class="sourceLineNo">1319</span><a id="line.1319"></a>
<span class="sourceLineNo">1320</span><a id="line.1320"> @Override</a>
<span class="sourceLineNo">1321</span><a id="line.1321"> public List&lt;String&gt; getChildRoleNames()</a>
<span class="sourceLineNo">1322</span><a id="line.1322"> {</a>
<span class="sourceLineNo">1323</span><a id="line.1323"> return this.childRoleNames;</a>
<span class="sourceLineNo">1324</span><a id="line.1324"> }</a>
<span class="sourceLineNo">1325</span><a id="line.1325"></a>
<span class="sourceLineNo">1326</span><a id="line.1326"> @Override</a>
<span class="sourceLineNo">1327</span><a id="line.1327"> public void addChildRoleId( String id )</a>
<span class="sourceLineNo">1328</span><a id="line.1328"> {</a>
<span class="sourceLineNo">1329</span><a id="line.1329"> this.childRoleIds.add( id );</a>
<span class="sourceLineNo">1330</span><a id="line.1330"> }</a>
<span class="sourceLineNo">1331</span><a id="line.1331"></a>
<span class="sourceLineNo">1332</span><a id="line.1332"> @Override</a>
<span class="sourceLineNo">1333</span><a id="line.1333"> public List&lt;String&gt; getChildRoleIds( )</a>
<span class="sourceLineNo">1334</span><a id="line.1334"> {</a>
<span class="sourceLineNo">1335</span><a id="line.1335"> return this.childRoleIds;</a>
<span class="sourceLineNo">1336</span><a id="line.1336"> }</a>
<span class="sourceLineNo">1337</span><a id="line.1337"></a>
<span class="sourceLineNo">1338</span><a id="line.1338"> @Override</a>
<span class="sourceLineNo">1339</span><a id="line.1339"> public String getDescription()</a>
<span class="sourceLineNo">1340</span><a id="line.1340"> {</a>
<span class="sourceLineNo">1341</span><a id="line.1341"> return this.description;</a>
<span class="sourceLineNo">1342</span><a id="line.1342"> }</a>
<span class="sourceLineNo">1343</span><a id="line.1343"></a>
<span class="sourceLineNo">1344</span><a id="line.1344"> @Override</a>
<span class="sourceLineNo">1345</span><a id="line.1345"> public String getName()</a>
<span class="sourceLineNo">1346</span><a id="line.1346"> {</a>
<span class="sourceLineNo">1347</span><a id="line.1347"> return this.name;</a>
<span class="sourceLineNo">1348</span><a id="line.1348"> }</a>
<span class="sourceLineNo">1349</span><a id="line.1349"></a>
<span class="sourceLineNo">1350</span><a id="line.1350"> @Override</a>
<span class="sourceLineNo">1351</span><a id="line.1351"> public List&lt;Permission&gt; getPermissions()</a>
<span class="sourceLineNo">1352</span><a id="line.1352"> {</a>
<span class="sourceLineNo">1353</span><a id="line.1353"> return this.permissions;</a>
<span class="sourceLineNo">1354</span><a id="line.1354"> }</a>
<span class="sourceLineNo">1355</span><a id="line.1355"></a>
<span class="sourceLineNo">1356</span><a id="line.1356"> @Override</a>
<span class="sourceLineNo">1357</span><a id="line.1357"> public boolean isAssignable()</a>
<span class="sourceLineNo">1358</span><a id="line.1358"> {</a>
<span class="sourceLineNo">1359</span><a id="line.1359"> return true;</a>
<span class="sourceLineNo">1360</span><a id="line.1360"> }</a>
<span class="sourceLineNo">1361</span><a id="line.1361"></a>
<span class="sourceLineNo">1362</span><a id="line.1362"> @Override</a>
<span class="sourceLineNo">1363</span><a id="line.1363"> public void removePermission( Permission permission )</a>
<span class="sourceLineNo">1364</span><a id="line.1364"> {</a>
<span class="sourceLineNo">1365</span><a id="line.1365"> this.permissions.remove( permission );</a>
<span class="sourceLineNo">1366</span><a id="line.1366"> }</a>
<span class="sourceLineNo">1367</span><a id="line.1367"></a>
<span class="sourceLineNo">1368</span><a id="line.1368"> @Override</a>
<span class="sourceLineNo">1369</span><a id="line.1369"> public void setAssignable( boolean assignable )</a>
<span class="sourceLineNo">1370</span><a id="line.1370"> {</a>
<span class="sourceLineNo">1371</span><a id="line.1371"> // no op</a>
<span class="sourceLineNo">1372</span><a id="line.1372"> }</a>
<span class="sourceLineNo">1373</span><a id="line.1373"></a>
<span class="sourceLineNo">1374</span><a id="line.1374"> @Override</a>
<span class="sourceLineNo">1375</span><a id="line.1375"> public void setChildRoleNames( List&lt;String&gt; names )</a>
<span class="sourceLineNo">1376</span><a id="line.1376"> {</a>
<span class="sourceLineNo">1377</span><a id="line.1377"> this.childRoleNames = names;</a>
<span class="sourceLineNo">1378</span><a id="line.1378"> }</a>
<span class="sourceLineNo">1379</span><a id="line.1379"></a>
<span class="sourceLineNo">1380</span><a id="line.1380"> @Override</a>
<span class="sourceLineNo">1381</span><a id="line.1381"> public void setChildRoleIds( List&lt;String&gt; ids )</a>
<span class="sourceLineNo">1382</span><a id="line.1382"> {</a>
<span class="sourceLineNo">1383</span><a id="line.1383"></a>
<span class="sourceLineNo">1384</span><a id="line.1384"> }</a>
<span class="sourceLineNo">1385</span><a id="line.1385"></a>
<span class="sourceLineNo">1386</span><a id="line.1386"> @Override</a>
<span class="sourceLineNo">1387</span><a id="line.1387"> public void setDescription( String description )</a>
<span class="sourceLineNo">1388</span><a id="line.1388"> {</a>
<span class="sourceLineNo">1389</span><a id="line.1389"> this.description = description;</a>
<span class="sourceLineNo">1390</span><a id="line.1390"> }</a>
<span class="sourceLineNo">1391</span><a id="line.1391"></a>
<span class="sourceLineNo">1392</span><a id="line.1392"> @Override</a>
<span class="sourceLineNo">1393</span><a id="line.1393"> public void setName( String name )</a>
<span class="sourceLineNo">1394</span><a id="line.1394"> {</a>
<span class="sourceLineNo">1395</span><a id="line.1395"> this.name = name;</a>
<span class="sourceLineNo">1396</span><a id="line.1396"> }</a>
<span class="sourceLineNo">1397</span><a id="line.1397"></a>
<span class="sourceLineNo">1398</span><a id="line.1398"> @Override</a>
<span class="sourceLineNo">1399</span><a id="line.1399"> public void setPermissions( List&lt;Permission&gt; permissions )</a>
<span class="sourceLineNo">1400</span><a id="line.1400"> {</a>
<span class="sourceLineNo">1401</span><a id="line.1401"> this.permissions = permissions;</a>
<span class="sourceLineNo">1402</span><a id="line.1402"> }</a>
<span class="sourceLineNo">1403</span><a id="line.1403"></a>
<span class="sourceLineNo">1404</span><a id="line.1404"> @Override</a>
<span class="sourceLineNo">1405</span><a id="line.1405"> public boolean isPermanent()</a>
<span class="sourceLineNo">1406</span><a id="line.1406"> {</a>
<span class="sourceLineNo">1407</span><a id="line.1407"> return true;</a>
<span class="sourceLineNo">1408</span><a id="line.1408"> }</a>
<span class="sourceLineNo">1409</span><a id="line.1409"></a>
<span class="sourceLineNo">1410</span><a id="line.1410"> @Override</a>
<span class="sourceLineNo">1411</span><a id="line.1411"> public void setPermanent( boolean permanent )</a>
<span class="sourceLineNo">1412</span><a id="line.1412"> {</a>
<span class="sourceLineNo">1413</span><a id="line.1413"> // no op</a>
<span class="sourceLineNo">1414</span><a id="line.1414"> }</a>
<span class="sourceLineNo">1415</span><a id="line.1415"></a>
<span class="sourceLineNo">1416</span><a id="line.1416"> @Override</a>
<span class="sourceLineNo">1417</span><a id="line.1417"> public String toString()</a>
<span class="sourceLineNo">1418</span><a id="line.1418"> {</a>
<span class="sourceLineNo">1419</span><a id="line.1419"> final StringBuilder sb = new StringBuilder();</a>
<span class="sourceLineNo">1420</span><a id="line.1420"> sb.append( "RoleImpl" );</a>
<span class="sourceLineNo">1421</span><a id="line.1421"> sb.append( "{name='" ).append( name ).append( '\'' );</a>
<span class="sourceLineNo">1422</span><a id="line.1422"> sb.append( '}' );</a>
<span class="sourceLineNo">1423</span><a id="line.1423"> return sb.toString();</a>
<span class="sourceLineNo">1424</span><a id="line.1424"> }</a>
<span class="sourceLineNo">1425</span><a id="line.1425"></a>
<span class="sourceLineNo">1426</span><a id="line.1426"> @Override</a>
<span class="sourceLineNo">1427</span><a id="line.1427"> public boolean equals( Object o )</a>
<span class="sourceLineNo">1428</span><a id="line.1428"> {</a>
<span class="sourceLineNo">1429</span><a id="line.1429"> if ( this == o )</a>
<span class="sourceLineNo">1430</span><a id="line.1430"> {</a>
<span class="sourceLineNo">1431</span><a id="line.1431"> return true;</a>
<span class="sourceLineNo">1432</span><a id="line.1432"> }</a>
<span class="sourceLineNo">1433</span><a id="line.1433"> if ( o == null || getClass() != o.getClass() )</a>
<span class="sourceLineNo">1434</span><a id="line.1434"> {</a>
<span class="sourceLineNo">1435</span><a id="line.1435"> return false;</a>
<span class="sourceLineNo">1436</span><a id="line.1436"> }</a>
<span class="sourceLineNo">1437</span><a id="line.1437"></a>
<span class="sourceLineNo">1438</span><a id="line.1438"> RoleImpl role = (RoleImpl) o;</a>
<span class="sourceLineNo">1439</span><a id="line.1439"></a>
<span class="sourceLineNo">1440</span><a id="line.1440"> if ( name != null ? !name.equals( role.name ) : role.name != null )</a>
<span class="sourceLineNo">1441</span><a id="line.1441"> {</a>
<span class="sourceLineNo">1442</span><a id="line.1442"> return false;</a>
<span class="sourceLineNo">1443</span><a id="line.1443"> }</a>
<span class="sourceLineNo">1444</span><a id="line.1444"></a>
<span class="sourceLineNo">1445</span><a id="line.1445"> return true;</a>
<span class="sourceLineNo">1446</span><a id="line.1446"> }</a>
<span class="sourceLineNo">1447</span><a id="line.1447"></a>
<span class="sourceLineNo">1448</span><a id="line.1448"> @Override</a>
<span class="sourceLineNo">1449</span><a id="line.1449"> public int hashCode()</a>
<span class="sourceLineNo">1450</span><a id="line.1450"> {</a>
<span class="sourceLineNo">1451</span><a id="line.1451"> return name != null ? name.hashCode() : 0;</a>
<span class="sourceLineNo">1452</span><a id="line.1452"> }</a>
<span class="sourceLineNo">1453</span><a id="line.1453"></a>
<span class="sourceLineNo">1454</span><a id="line.1454"></a>
<span class="sourceLineNo">1455</span><a id="line.1455"> @Override</a>
<span class="sourceLineNo">1456</span><a id="line.1456"> public String getId( )</a>
<span class="sourceLineNo">1457</span><a id="line.1457"> {</a>
<span class="sourceLineNo">1458</span><a id="line.1458"> return id;</a>
<span class="sourceLineNo">1459</span><a id="line.1459"> }</a>
<span class="sourceLineNo">1460</span><a id="line.1460"></a>
<span class="sourceLineNo">1461</span><a id="line.1461"> @Override</a>
<span class="sourceLineNo">1462</span><a id="line.1462"> public void setId( String id )</a>
<span class="sourceLineNo">1463</span><a id="line.1463"> {</a>
<span class="sourceLineNo">1464</span><a id="line.1464"> if (id==null) {</a>
<span class="sourceLineNo">1465</span><a id="line.1465"> this.id = "";</a>
<span class="sourceLineNo">1466</span><a id="line.1466"> } else</a>
<span class="sourceLineNo">1467</span><a id="line.1467"> {</a>
<span class="sourceLineNo">1468</span><a id="line.1468"> this.id = id;</a>
<span class="sourceLineNo">1469</span><a id="line.1469"> }</a>
<span class="sourceLineNo">1470</span><a id="line.1470"> }</a>
<span class="sourceLineNo">1471</span><a id="line.1471"></a>
<span class="sourceLineNo">1472</span><a id="line.1472"> @Override</a>
<span class="sourceLineNo">1473</span><a id="line.1473"> public String getModelId( )</a>
<span class="sourceLineNo">1474</span><a id="line.1474"> {</a>
<span class="sourceLineNo">1475</span><a id="line.1475"> return modelId;</a>
<span class="sourceLineNo">1476</span><a id="line.1476"> }</a>
<span class="sourceLineNo">1477</span><a id="line.1477"></a>
<span class="sourceLineNo">1478</span><a id="line.1478"> @Override</a>
<span class="sourceLineNo">1479</span><a id="line.1479"> public void setModelId( String modelId )</a>
<span class="sourceLineNo">1480</span><a id="line.1480"> {</a>
<span class="sourceLineNo">1481</span><a id="line.1481"> if (modelId==null) {</a>
<span class="sourceLineNo">1482</span><a id="line.1482"> this.modelId = "";</a>
<span class="sourceLineNo">1483</span><a id="line.1483"> } else</a>
<span class="sourceLineNo">1484</span><a id="line.1484"> {</a>
<span class="sourceLineNo">1485</span><a id="line.1485"> this.modelId = modelId;</a>
<span class="sourceLineNo">1486</span><a id="line.1486"> }</a>
<span class="sourceLineNo">1487</span><a id="line.1487"> }</a>
<span class="sourceLineNo">1488</span><a id="line.1488"></a>
<span class="sourceLineNo">1489</span><a id="line.1489"> @Override</a>
<span class="sourceLineNo">1490</span><a id="line.1490"> public boolean isTemplateInstance( )</a>
<span class="sourceLineNo">1491</span><a id="line.1491"> {</a>
<span class="sourceLineNo">1492</span><a id="line.1492"> return isTemplateInstance;</a>
<span class="sourceLineNo">1493</span><a id="line.1493"> }</a>
<span class="sourceLineNo">1494</span><a id="line.1494"></a>
<span class="sourceLineNo">1495</span><a id="line.1495"> @Override</a>
<span class="sourceLineNo">1496</span><a id="line.1496"> public void setTemplateInstance( boolean templateInstance )</a>
<span class="sourceLineNo">1497</span><a id="line.1497"> {</a>
<span class="sourceLineNo">1498</span><a id="line.1498"> isTemplateInstance = templateInstance;</a>
<span class="sourceLineNo">1499</span><a id="line.1499"> }</a>
<span class="sourceLineNo">1500</span><a id="line.1500"></a>
<span class="sourceLineNo">1501</span><a id="line.1501"> @Override</a>
<span class="sourceLineNo">1502</span><a id="line.1502"> public String getResource( )</a>
<span class="sourceLineNo">1503</span><a id="line.1503"> {</a>
<span class="sourceLineNo">1504</span><a id="line.1504"> return resource;</a>
<span class="sourceLineNo">1505</span><a id="line.1505"> }</a>
<span class="sourceLineNo">1506</span><a id="line.1506"></a>
<span class="sourceLineNo">1507</span><a id="line.1507"> @Override</a>
<span class="sourceLineNo">1508</span><a id="line.1508"> public void setResource( String resource )</a>
<span class="sourceLineNo">1509</span><a id="line.1509"> {</a>
<span class="sourceLineNo">1510</span><a id="line.1510"> if (resource==null) {</a>
<span class="sourceLineNo">1511</span><a id="line.1511"> this.resource = "";</a>
<span class="sourceLineNo">1512</span><a id="line.1512"> } else</a>
<span class="sourceLineNo">1513</span><a id="line.1513"> {</a>
<span class="sourceLineNo">1514</span><a id="line.1514"> this.resource = resource;</a>
<span class="sourceLineNo">1515</span><a id="line.1515"> }</a>
<span class="sourceLineNo">1516</span><a id="line.1516"> }</a>
<span class="sourceLineNo">1517</span><a id="line.1517"></a>
<span class="sourceLineNo">1518</span><a id="line.1518"></a>
<span class="sourceLineNo">1519</span><a id="line.1519"> }</a>
<span class="sourceLineNo">1520</span><a id="line.1520"></a>
<span class="sourceLineNo">1521</span><a id="line.1521"> private static class UserAssignmentImpl</a>
<span class="sourceLineNo">1522</span><a id="line.1522"> implements UserAssignment</a>
<span class="sourceLineNo">1523</span><a id="line.1523"> {</a>
<span class="sourceLineNo">1524</span><a id="line.1524"> private String username;</a>
<span class="sourceLineNo">1525</span><a id="line.1525"></a>
<span class="sourceLineNo">1526</span><a id="line.1526"> private List&lt;String&gt; roleIds;</a>
<span class="sourceLineNo">1527</span><a id="line.1527"></a>
<span class="sourceLineNo">1528</span><a id="line.1528"> private boolean permanent;</a>
<span class="sourceLineNo">1529</span><a id="line.1529"></a>
<span class="sourceLineNo">1530</span><a id="line.1530"> private UserAssignmentImpl( String username, Collection&lt;String&gt; roleIds )</a>
<span class="sourceLineNo">1531</span><a id="line.1531"> {</a>
<span class="sourceLineNo">1532</span><a id="line.1532"> this.username = username;</a>
<span class="sourceLineNo">1533</span><a id="line.1533"></a>
<span class="sourceLineNo">1534</span><a id="line.1534"> if ( roleIds == null )</a>
<span class="sourceLineNo">1535</span><a id="line.1535"> {</a>
<span class="sourceLineNo">1536</span><a id="line.1536"> this.roleIds = new ArrayList&lt;&gt;( );</a>
<span class="sourceLineNo">1537</span><a id="line.1537"> }</a>
<span class="sourceLineNo">1538</span><a id="line.1538"> else</a>
<span class="sourceLineNo">1539</span><a id="line.1539"> {</a>
<span class="sourceLineNo">1540</span><a id="line.1540"> this.roleIds = new ArrayList&lt;&gt;( roleIds );</a>
<span class="sourceLineNo">1541</span><a id="line.1541"> }</a>
<span class="sourceLineNo">1542</span><a id="line.1542"> }</a>
<span class="sourceLineNo">1543</span><a id="line.1543"></a>
<span class="sourceLineNo">1544</span><a id="line.1544"> @Override</a>
<span class="sourceLineNo">1545</span><a id="line.1545"> public String getPrincipal()</a>
<span class="sourceLineNo">1546</span><a id="line.1546"> {</a>
<span class="sourceLineNo">1547</span><a id="line.1547"> return this.username;</a>
<span class="sourceLineNo">1548</span><a id="line.1548"> }</a>
<span class="sourceLineNo">1549</span><a id="line.1549"></a>
<span class="sourceLineNo">1550</span><a id="line.1550"> @Override</a>
<span class="sourceLineNo">1551</span><a id="line.1551"> public List&lt;String&gt; getRoleNames()</a>
<span class="sourceLineNo">1552</span><a id="line.1552"> {</a>
<span class="sourceLineNo">1553</span><a id="line.1553"> return this.roleIds;</a>
<span class="sourceLineNo">1554</span><a id="line.1554"> }</a>
<span class="sourceLineNo">1555</span><a id="line.1555"></a>
<span class="sourceLineNo">1556</span><a id="line.1556"> @Override</a>
<span class="sourceLineNo">1557</span><a id="line.1557"> public List&lt;String&gt; getRoleIds( )</a>
<span class="sourceLineNo">1558</span><a id="line.1558"> {</a>
<span class="sourceLineNo">1559</span><a id="line.1559"> return this.roleIds;</a>
<span class="sourceLineNo">1560</span><a id="line.1560"> }</a>
<span class="sourceLineNo">1561</span><a id="line.1561"></a>
<span class="sourceLineNo">1562</span><a id="line.1562"> @Override</a>
<span class="sourceLineNo">1563</span><a id="line.1563"> public void addRoleName( Role role )</a>
<span class="sourceLineNo">1564</span><a id="line.1564"> {</a>
<span class="sourceLineNo">1565</span><a id="line.1565"> if ( role == null )</a>
<span class="sourceLineNo">1566</span><a id="line.1566"> {</a>
<span class="sourceLineNo">1567</span><a id="line.1567"> return;</a>
<span class="sourceLineNo">1568</span><a id="line.1568"> }</a>
<span class="sourceLineNo">1569</span><a id="line.1569"> this.roleIds.add( role.getName() );</a>
<span class="sourceLineNo">1570</span><a id="line.1570"> }</a>
<span class="sourceLineNo">1571</span><a id="line.1571"></a>
<span class="sourceLineNo">1572</span><a id="line.1572"> @Override</a>
<span class="sourceLineNo">1573</span><a id="line.1573"> public void addRoleName( String roleName )</a>
<span class="sourceLineNo">1574</span><a id="line.1574"> {</a>
<span class="sourceLineNo">1575</span><a id="line.1575"> if ( roleName == null )</a>
<span class="sourceLineNo">1576</span><a id="line.1576"> {</a>
<span class="sourceLineNo">1577</span><a id="line.1577"> return;</a>
<span class="sourceLineNo">1578</span><a id="line.1578"> }</a>
<span class="sourceLineNo">1579</span><a id="line.1579"> this.roleIds.add( roleName );</a>
<span class="sourceLineNo">1580</span><a id="line.1580"> }</a>
<span class="sourceLineNo">1581</span><a id="line.1581"></a>
<span class="sourceLineNo">1582</span><a id="line.1582"> @Override</a>
<span class="sourceLineNo">1583</span><a id="line.1583"> public void addRoleId( Role role )</a>
<span class="sourceLineNo">1584</span><a id="line.1584"> {</a>
<span class="sourceLineNo">1585</span><a id="line.1585"> if ( role == null )</a>
<span class="sourceLineNo">1586</span><a id="line.1586"> {</a>
<span class="sourceLineNo">1587</span><a id="line.1587"> return;</a>
<span class="sourceLineNo">1588</span><a id="line.1588"> }</a>
<span class="sourceLineNo">1589</span><a id="line.1589"> this.roleIds.add( role.getId() );</a>
<span class="sourceLineNo">1590</span><a id="line.1590"> }</a>
<span class="sourceLineNo">1591</span><a id="line.1591"></a>
<span class="sourceLineNo">1592</span><a id="line.1592"> @Override</a>
<span class="sourceLineNo">1593</span><a id="line.1593"> public void addRoleId( String roleId )</a>
<span class="sourceLineNo">1594</span><a id="line.1594"> {</a>
<span class="sourceLineNo">1595</span><a id="line.1595"> if ( roleId == null )</a>
<span class="sourceLineNo">1596</span><a id="line.1596"> {</a>
<span class="sourceLineNo">1597</span><a id="line.1597"> return;</a>
<span class="sourceLineNo">1598</span><a id="line.1598"> }</a>
<span class="sourceLineNo">1599</span><a id="line.1599"> this.roleIds.add( roleId );</a>
<span class="sourceLineNo">1600</span><a id="line.1600"> }</a>
<span class="sourceLineNo">1601</span><a id="line.1601"></a>
<span class="sourceLineNo">1602</span><a id="line.1602"> @Override</a>
<span class="sourceLineNo">1603</span><a id="line.1603"> public void removeRoleName( Role role )</a>
<span class="sourceLineNo">1604</span><a id="line.1604"> {</a>
<span class="sourceLineNo">1605</span><a id="line.1605"> if ( role == null )</a>
<span class="sourceLineNo">1606</span><a id="line.1606"> {</a>
<span class="sourceLineNo">1607</span><a id="line.1607"> return;</a>
<span class="sourceLineNo">1608</span><a id="line.1608"> }</a>
<span class="sourceLineNo">1609</span><a id="line.1609"> this.roleIds.remove( role.getName() );</a>
<span class="sourceLineNo">1610</span><a id="line.1610"> }</a>
<span class="sourceLineNo">1611</span><a id="line.1611"></a>
<span class="sourceLineNo">1612</span><a id="line.1612"> @Override</a>
<span class="sourceLineNo">1613</span><a id="line.1613"> public void removeRoleName( String roleName )</a>
<span class="sourceLineNo">1614</span><a id="line.1614"> {</a>
<span class="sourceLineNo">1615</span><a id="line.1615"> if ( roleName == null )</a>
<span class="sourceLineNo">1616</span><a id="line.1616"> {</a>
<span class="sourceLineNo">1617</span><a id="line.1617"> return;</a>
<span class="sourceLineNo">1618</span><a id="line.1618"> }</a>
<span class="sourceLineNo">1619</span><a id="line.1619"> this.roleIds.remove( roleName );</a>
<span class="sourceLineNo">1620</span><a id="line.1620"> }</a>
<span class="sourceLineNo">1621</span><a id="line.1621"></a>
<span class="sourceLineNo">1622</span><a id="line.1622"> @Override</a>
<span class="sourceLineNo">1623</span><a id="line.1623"> public void removeRoleId( Role role )</a>
<span class="sourceLineNo">1624</span><a id="line.1624"> {</a>
<span class="sourceLineNo">1625</span><a id="line.1625"> if ( role == null )</a>
<span class="sourceLineNo">1626</span><a id="line.1626"> {</a>
<span class="sourceLineNo">1627</span><a id="line.1627"> return;</a>
<span class="sourceLineNo">1628</span><a id="line.1628"> }</a>
<span class="sourceLineNo">1629</span><a id="line.1629"> this.roleIds.remove( role.getId() );</a>
<span class="sourceLineNo">1630</span><a id="line.1630"> }</a>
<span class="sourceLineNo">1631</span><a id="line.1631"></a>
<span class="sourceLineNo">1632</span><a id="line.1632"> @Override</a>
<span class="sourceLineNo">1633</span><a id="line.1633"> public void removeRoleId( String roleId )</a>
<span class="sourceLineNo">1634</span><a id="line.1634"> {</a>
<span class="sourceLineNo">1635</span><a id="line.1635"> if ( roleId == null )</a>
<span class="sourceLineNo">1636</span><a id="line.1636"> {</a>
<span class="sourceLineNo">1637</span><a id="line.1637"> return;</a>
<span class="sourceLineNo">1638</span><a id="line.1638"> }</a>
<span class="sourceLineNo">1639</span><a id="line.1639"> this.roleIds.remove( roleId );</a>
<span class="sourceLineNo">1640</span><a id="line.1640"> }</a>
<span class="sourceLineNo">1641</span><a id="line.1641"></a>
<span class="sourceLineNo">1642</span><a id="line.1642"> @Override</a>
<span class="sourceLineNo">1643</span><a id="line.1643"> public void setPrincipal( String principal )</a>
<span class="sourceLineNo">1644</span><a id="line.1644"> {</a>
<span class="sourceLineNo">1645</span><a id="line.1645"> this.username = principal;</a>
<span class="sourceLineNo">1646</span><a id="line.1646"> }</a>
<span class="sourceLineNo">1647</span><a id="line.1647"></a>
<span class="sourceLineNo">1648</span><a id="line.1648"> @Override</a>
<span class="sourceLineNo">1649</span><a id="line.1649"> public void setRoleNames( List&lt;String&gt; roles )</a>
<span class="sourceLineNo">1650</span><a id="line.1650"> {</a>
<span class="sourceLineNo">1651</span><a id="line.1651"> this.roleIds = roles;</a>
<span class="sourceLineNo">1652</span><a id="line.1652"> }</a>
<span class="sourceLineNo">1653</span><a id="line.1653"></a>
<span class="sourceLineNo">1654</span><a id="line.1654"> @Override</a>
<span class="sourceLineNo">1655</span><a id="line.1655"> public void setRoleIds( List&lt;String&gt; roles )</a>
<span class="sourceLineNo">1656</span><a id="line.1656"> {</a>
<span class="sourceLineNo">1657</span><a id="line.1657"> this.roleIds = roles;</a>
<span class="sourceLineNo">1658</span><a id="line.1658"> }</a>
<span class="sourceLineNo">1659</span><a id="line.1659"></a>
<span class="sourceLineNo">1660</span><a id="line.1660"> @Override</a>
<span class="sourceLineNo">1661</span><a id="line.1661"> public boolean isPermanent()</a>
<span class="sourceLineNo">1662</span><a id="line.1662"> {</a>
<span class="sourceLineNo">1663</span><a id="line.1663"> return this.permanent;</a>
<span class="sourceLineNo">1664</span><a id="line.1664"> }</a>
<span class="sourceLineNo">1665</span><a id="line.1665"></a>
<span class="sourceLineNo">1666</span><a id="line.1666"> @Override</a>
<span class="sourceLineNo">1667</span><a id="line.1667"> public void setPermanent( boolean permanent )</a>
<span class="sourceLineNo">1668</span><a id="line.1668"> {</a>
<span class="sourceLineNo">1669</span><a id="line.1669"> this.permanent = permanent;</a>
<span class="sourceLineNo">1670</span><a id="line.1670"> }</a>
<span class="sourceLineNo">1671</span><a id="line.1671"></a>
<span class="sourceLineNo">1672</span><a id="line.1672"> @Override</a>
<span class="sourceLineNo">1673</span><a id="line.1673"> public String toString()</a>
<span class="sourceLineNo">1674</span><a id="line.1674"> {</a>
<span class="sourceLineNo">1675</span><a id="line.1675"> final StringBuilder sb = new StringBuilder();</a>
<span class="sourceLineNo">1676</span><a id="line.1676"> sb.append( "UserAssignmentImpl" );</a>
<span class="sourceLineNo">1677</span><a id="line.1677"> sb.append( "{username='" ).append( username ).append( '\'' );</a>
<span class="sourceLineNo">1678</span><a id="line.1678"> sb.append( ", roleNames=" ).append( roleIds );</a>
<span class="sourceLineNo">1679</span><a id="line.1679"> sb.append( ", permanent=" ).append( permanent );</a>
<span class="sourceLineNo">1680</span><a id="line.1680"> sb.append( '}' );</a>
<span class="sourceLineNo">1681</span><a id="line.1681"> return sb.toString();</a>
<span class="sourceLineNo">1682</span><a id="line.1682"> }</a>
<span class="sourceLineNo">1683</span><a id="line.1683"> }</a>
<span class="sourceLineNo">1684</span><a id="line.1684"></a>
<span class="sourceLineNo">1685</span><a id="line.1685"></a>
<span class="sourceLineNo">1686</span><a id="line.1686"> @Override</a>
<span class="sourceLineNo">1687</span><a id="line.1687"> public boolean isFinalImplementation()</a>
<span class="sourceLineNo">1688</span><a id="line.1688"> {</a>
<span class="sourceLineNo">1689</span><a id="line.1689"> return true;</a>
<span class="sourceLineNo">1690</span><a id="line.1690"> }</a>
<span class="sourceLineNo">1691</span><a id="line.1691"></a>
<span class="sourceLineNo">1692</span><a id="line.1692"> @Override</a>
<span class="sourceLineNo">1693</span><a id="line.1693"> public String getDescriptionKey()</a>
<span class="sourceLineNo">1694</span><a id="line.1694"> {</a>
<span class="sourceLineNo">1695</span><a id="line.1695"> return "archiva.redback.rbacmanager.ldap";</a>
<span class="sourceLineNo">1696</span><a id="line.1696"> }</a>
<span class="sourceLineNo">1697</span><a id="line.1697"></a>
<span class="sourceLineNo">1698</span><a id="line.1698"> @Override</a>
<span class="sourceLineNo">1699</span><a id="line.1699"> public boolean isReadOnly()</a>
<span class="sourceLineNo">1700</span><a id="line.1700"> {</a>
<span class="sourceLineNo">1701</span><a id="line.1701"> return !writableLdap;</a>
<span class="sourceLineNo">1702</span><a id="line.1702"> }</a>
<span class="sourceLineNo">1703</span><a id="line.1703">}</a>
</pre>
</div>
</main>
</body>
</html>