<!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">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.authz;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import java.util.Collection;</a>
<span class="sourceLineNo">022</span><a id="line.22">import java.util.HashSet;</a>
<span class="sourceLineNo">023</span><a id="line.23">import java.util.Set;</a>
<span class="sourceLineNo">024</span><a id="line.24"></a>
<span class="sourceLineNo">025</span><a id="line.25">/**</a>
<span class="sourceLineNo">026</span><a id="line.26"> * Simple POJO implementation of the {@link AuthorizationInfo} interface that stores roles and permissions as internal</a>
<span class="sourceLineNo">027</span><a id="line.27"> * attributes.</a>
<span class="sourceLineNo">028</span><a id="line.28"> *</a>
<span class="sourceLineNo">029</span><a id="line.29"> * @see org.apache.shiro.realm.AuthorizingRealm</a>
<span class="sourceLineNo">030</span><a id="line.30"> * @since 0.9</a>
<span class="sourceLineNo">031</span><a id="line.31"> */</a>
<span class="sourceLineNo">032</span><a id="line.32">public class SimpleAuthorizationInfo implements AuthorizationInfo {</a>
<span class="sourceLineNo">033</span><a id="line.33"></a>
<span class="sourceLineNo">034</span><a id="line.34">    /**</a>
<span class="sourceLineNo">035</span><a id="line.35">     * The internal roles collection.</a>
<span class="sourceLineNo">036</span><a id="line.36">     */</a>
<span class="sourceLineNo">037</span><a id="line.37">    protected Set&lt;String&gt; roles;</a>
<span class="sourceLineNo">038</span><a id="line.38"></a>
<span class="sourceLineNo">039</span><a id="line.39">    /**</a>
<span class="sourceLineNo">040</span><a id="line.40">     * Collection of all string-based permissions associated with the account.</a>
<span class="sourceLineNo">041</span><a id="line.41">     */</a>
<span class="sourceLineNo">042</span><a id="line.42">    protected Set&lt;String&gt; stringPermissions;</a>
<span class="sourceLineNo">043</span><a id="line.43"></a>
<span class="sourceLineNo">044</span><a id="line.44">    /**</a>
<span class="sourceLineNo">045</span><a id="line.45">     * Collection of all object-based permissions associated with the account.</a>
<span class="sourceLineNo">046</span><a id="line.46">     */</a>
<span class="sourceLineNo">047</span><a id="line.47">    protected Set&lt;Permission&gt; objectPermissions;</a>
<span class="sourceLineNo">048</span><a id="line.48"></a>
<span class="sourceLineNo">049</span><a id="line.49">    /**</a>
<span class="sourceLineNo">050</span><a id="line.50">     * Default no-argument constructor.</a>
<span class="sourceLineNo">051</span><a id="line.51">     */</a>
<span class="sourceLineNo">052</span><a id="line.52">    public SimpleAuthorizationInfo() {</a>
<span class="sourceLineNo">053</span><a id="line.53">    }</a>
<span class="sourceLineNo">054</span><a id="line.54"></a>
<span class="sourceLineNo">055</span><a id="line.55">    /**</a>
<span class="sourceLineNo">056</span><a id="line.56">     * Creates a new instance with the specified roles and no permissions.</a>
<span class="sourceLineNo">057</span><a id="line.57">     * @param roles the roles assigned to the realm account.</a>
<span class="sourceLineNo">058</span><a id="line.58">     */</a>
<span class="sourceLineNo">059</span><a id="line.59">    public SimpleAuthorizationInfo(Set&lt;String&gt; roles) {</a>
<span class="sourceLineNo">060</span><a id="line.60">        this.roles = roles;</a>
<span class="sourceLineNo">061</span><a id="line.61">    }</a>
<span class="sourceLineNo">062</span><a id="line.62"></a>
<span class="sourceLineNo">063</span><a id="line.63">    public Set&lt;String&gt; getRoles() {</a>
<span class="sourceLineNo">064</span><a id="line.64">        return roles;</a>
<span class="sourceLineNo">065</span><a id="line.65">    }</a>
<span class="sourceLineNo">066</span><a id="line.66"></a>
<span class="sourceLineNo">067</span><a id="line.67">    /**</a>
<span class="sourceLineNo">068</span><a id="line.68">     * Sets the roles assigned to the account.</a>
<span class="sourceLineNo">069</span><a id="line.69">     * @param roles the roles assigned to the account.</a>
<span class="sourceLineNo">070</span><a id="line.70">     */</a>
<span class="sourceLineNo">071</span><a id="line.71">    public void setRoles(Set&lt;String&gt; roles) {</a>
<span class="sourceLineNo">072</span><a id="line.72">        this.roles = roles;</a>
<span class="sourceLineNo">073</span><a id="line.73">    }</a>
<span class="sourceLineNo">074</span><a id="line.74"></a>
<span class="sourceLineNo">075</span><a id="line.75">    /**</a>
<span class="sourceLineNo">076</span><a id="line.76">     * Adds (assigns) a role to those associated with the account.  If the account doesn't yet have any roles, a</a>
<span class="sourceLineNo">077</span><a id="line.77">     * new roles collection (a Set) will be created automatically.</a>
<span class="sourceLineNo">078</span><a id="line.78">     * @param role the role to add to those associated with the account.</a>
<span class="sourceLineNo">079</span><a id="line.79">     */</a>
<span class="sourceLineNo">080</span><a id="line.80">    public void addRole(String role) {</a>
<span class="sourceLineNo">081</span><a id="line.81">        if (this.roles == null) {</a>
<span class="sourceLineNo">082</span><a id="line.82">            this.roles = new HashSet&lt;String&gt;();</a>
<span class="sourceLineNo">083</span><a id="line.83">        }</a>
<span class="sourceLineNo">084</span><a id="line.84">        this.roles.add(role);</a>
<span class="sourceLineNo">085</span><a id="line.85">    }</a>
<span class="sourceLineNo">086</span><a id="line.86"></a>
<span class="sourceLineNo">087</span><a id="line.87">    /**</a>
<span class="sourceLineNo">088</span><a id="line.88">     * Adds (assigns) multiple roles to those associated with the account.  If the account doesn't yet have any roles, a</a>
<span class="sourceLineNo">089</span><a id="line.89">     * new roles collection (a Set) will be created automatically.</a>
<span class="sourceLineNo">090</span><a id="line.90">     * @param roles the roles to add to those associated with the account.</a>
<span class="sourceLineNo">091</span><a id="line.91">     */</a>
<span class="sourceLineNo">092</span><a id="line.92">    public void addRoles(Collection&lt;String&gt; roles) {</a>
<span class="sourceLineNo">093</span><a id="line.93">        if (this.roles == null) {</a>
<span class="sourceLineNo">094</span><a id="line.94">            this.roles = new HashSet&lt;String&gt;();</a>
<span class="sourceLineNo">095</span><a id="line.95">        }</a>
<span class="sourceLineNo">096</span><a id="line.96">        this.roles.addAll(roles);</a>
<span class="sourceLineNo">097</span><a id="line.97">    }</a>
<span class="sourceLineNo">098</span><a id="line.98"></a>
<span class="sourceLineNo">099</span><a id="line.99">    public Set&lt;String&gt; getStringPermissions() {</a>
<span class="sourceLineNo">100</span><a id="line.100">        return stringPermissions;</a>
<span class="sourceLineNo">101</span><a id="line.101">    }</a>
<span class="sourceLineNo">102</span><a id="line.102"></a>
<span class="sourceLineNo">103</span><a id="line.103">    /**</a>
<span class="sourceLineNo">104</span><a id="line.104">     * Sets the string-based permissions assigned directly to the account.  The permissions set here, in addition to any</a>
<span class="sourceLineNo">105</span><a id="line.105">     * {@link #getObjectPermissions() object permissions} constitute the total permissions assigned directly to the</a>
<span class="sourceLineNo">106</span><a id="line.106">     * account.</a>
<span class="sourceLineNo">107</span><a id="line.107">     *</a>
<span class="sourceLineNo">108</span><a id="line.108">     * @param stringPermissions the string-based permissions assigned directly to the account.</a>
<span class="sourceLineNo">109</span><a id="line.109">     */</a>
<span class="sourceLineNo">110</span><a id="line.110">    public void setStringPermissions(Set&lt;String&gt; stringPermissions) {</a>
<span class="sourceLineNo">111</span><a id="line.111">        this.stringPermissions = stringPermissions;</a>
<span class="sourceLineNo">112</span><a id="line.112">    }</a>
<span class="sourceLineNo">113</span><a id="line.113"></a>
<span class="sourceLineNo">114</span><a id="line.114">    /**</a>
<span class="sourceLineNo">115</span><a id="line.115">     * Adds (assigns) a permission to those directly associated with the account.  If the account doesn't yet have any</a>
<span class="sourceLineNo">116</span><a id="line.116">     * direct permissions, a new permission collection (a Set&amp;lt;String&amp;gt;) will be created automatically.</a>
<span class="sourceLineNo">117</span><a id="line.117">     * @param permission the permission to add to those directly assigned to the account.</a>
<span class="sourceLineNo">118</span><a id="line.118">     */</a>
<span class="sourceLineNo">119</span><a id="line.119">    public void addStringPermission(String permission) {</a>
<span class="sourceLineNo">120</span><a id="line.120">        if (this.stringPermissions == null) {</a>
<span class="sourceLineNo">121</span><a id="line.121">            this.stringPermissions = new HashSet&lt;String&gt;();</a>
<span class="sourceLineNo">122</span><a id="line.122">        }</a>
<span class="sourceLineNo">123</span><a id="line.123">        this.stringPermissions.add(permission);</a>
<span class="sourceLineNo">124</span><a id="line.124">    }</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">     * Adds (assigns) multiple permissions to those associated directly with the account.  If the account doesn't yet</a>
<span class="sourceLineNo">128</span><a id="line.128">     * have any string-based permissions, a  new permissions collection (a Set&amp;lt;String&amp;gt;) will be created automatically.</a>
<span class="sourceLineNo">129</span><a id="line.129">     * @param permissions the permissions to add to those associated directly with the account.</a>
<span class="sourceLineNo">130</span><a id="line.130">     */</a>
<span class="sourceLineNo">131</span><a id="line.131">    public void addStringPermissions(Collection&lt;String&gt; permissions) {</a>
<span class="sourceLineNo">132</span><a id="line.132">        if (this.stringPermissions == null) {</a>
<span class="sourceLineNo">133</span><a id="line.133">            this.stringPermissions = new HashSet&lt;String&gt;();</a>
<span class="sourceLineNo">134</span><a id="line.134">        }</a>
<span class="sourceLineNo">135</span><a id="line.135">        this.stringPermissions.addAll(permissions);</a>
<span class="sourceLineNo">136</span><a id="line.136">    }</a>
<span class="sourceLineNo">137</span><a id="line.137"></a>
<span class="sourceLineNo">138</span><a id="line.138">    public Set&lt;Permission&gt; getObjectPermissions() {</a>
<span class="sourceLineNo">139</span><a id="line.139">        return objectPermissions;</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">    /**</a>
<span class="sourceLineNo">143</span><a id="line.143">     * Sets the object-based permissions assigned directly to the account.  The permissions set here, in addition to any</a>
<span class="sourceLineNo">144</span><a id="line.144">     * {@link #getStringPermissions() string permissions} constitute the total permissions assigned directly to the</a>
<span class="sourceLineNo">145</span><a id="line.145">     * account.</a>
<span class="sourceLineNo">146</span><a id="line.146">     *</a>
<span class="sourceLineNo">147</span><a id="line.147">     * @param objectPermissions the object-based permissions assigned directly to the account.</a>
<span class="sourceLineNo">148</span><a id="line.148">     */</a>
<span class="sourceLineNo">149</span><a id="line.149">    public void setObjectPermissions(Set&lt;Permission&gt; objectPermissions) {</a>
<span class="sourceLineNo">150</span><a id="line.150">        this.objectPermissions = objectPermissions;</a>
<span class="sourceLineNo">151</span><a id="line.151">    }</a>
<span class="sourceLineNo">152</span><a id="line.152"></a>
<span class="sourceLineNo">153</span><a id="line.153">    /**</a>
<span class="sourceLineNo">154</span><a id="line.154">     * Adds (assigns) a permission to those directly associated with the account.  If the account doesn't yet have any</a>
<span class="sourceLineNo">155</span><a id="line.155">     * direct permissions, a new permission collection (a Set&amp;lt;{@link Permission Permission}&amp;gt;) will be created automatically.</a>
<span class="sourceLineNo">156</span><a id="line.156">     * @param permission the permission to add to those directly assigned to the account.</a>
<span class="sourceLineNo">157</span><a id="line.157">     */</a>
<span class="sourceLineNo">158</span><a id="line.158">    public void addObjectPermission(Permission permission) {</a>
<span class="sourceLineNo">159</span><a id="line.159">        if (this.objectPermissions == null) {</a>
<span class="sourceLineNo">160</span><a id="line.160">            this.objectPermissions = new HashSet&lt;Permission&gt;();</a>
<span class="sourceLineNo">161</span><a id="line.161">        }</a>
<span class="sourceLineNo">162</span><a id="line.162">        this.objectPermissions.add(permission);</a>
<span class="sourceLineNo">163</span><a id="line.163">    }</a>
<span class="sourceLineNo">164</span><a id="line.164"></a>
<span class="sourceLineNo">165</span><a id="line.165">    /**</a>
<span class="sourceLineNo">166</span><a id="line.166">     * Adds (assigns) multiple permissions to those associated directly with the account.  If the account doesn't yet</a>
<span class="sourceLineNo">167</span><a id="line.167">     * have any object-based permissions, a  new permissions collection (a Set&amp;lt;{@link Permission Permission}&amp;gt;)</a>
<span class="sourceLineNo">168</span><a id="line.168">     * will be created automatically.</a>
<span class="sourceLineNo">169</span><a id="line.169">     * @param permissions the permissions to add to those associated directly with the account.</a>
<span class="sourceLineNo">170</span><a id="line.170">     */</a>
<span class="sourceLineNo">171</span><a id="line.171">    public void addObjectPermissions(Collection&lt;Permission&gt; permissions) {</a>
<span class="sourceLineNo">172</span><a id="line.172">        if (this.objectPermissions == null) {</a>
<span class="sourceLineNo">173</span><a id="line.173">            this.objectPermissions = new HashSet&lt;Permission&gt;();</a>
<span class="sourceLineNo">174</span><a id="line.174">        }</a>
<span class="sourceLineNo">175</span><a id="line.175">        this.objectPermissions.addAll(permissions);</a>
<span class="sourceLineNo">176</span><a id="line.176">    }</a>
<span class="sourceLineNo">177</span><a id="line.177">}</a>




























































</pre>
</div>
</main>
</body>
</html>
