1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.security.acl;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Principal;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Enumeration;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The <i>Access Control List Entry</i> interface definition.
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
26f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * An {@code AclEntry} is a list of the {@link Permission}s that are
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  granted (<i>positive</i>) or denied (<i>negative</i>) to a {@link Principal}.
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic interface AclEntry extends Cloneable {
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Set the principal for this ACL entry.
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The principal for an ACL entry can only be set once.
352f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param user
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the principal for this ACL entry.
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} on success, {@code false} if there is a principal already set for
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         this entry.
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    boolean setPrincipal(Principal user);
42f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the principal of this ACL entry.
45f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the principal of this ACL entry, or null if none is set.
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Principal getPrincipal();
49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets this ACL entry to be <i>negative</i>.
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The permissions in this ACL entry will be denied to the principal
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * associated with this entry.
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Note: An ACL entry is <i>positive</i> by default and can only become
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <i>negative</i> by calling this method.
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    void setNegativePermissions();
60f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns whether this ACL entry is <i>negative</i>.
63f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this ACL entry is negative, {@code false} if it's positive.
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    boolean isNegative();
67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Adds the specified permission to this ACL entry.
70f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param permission
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the permission to be added.
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the specified permission is added, {@code false} if the
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         permission was already in this entry.
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    boolean addPermission(Permission permission);
77f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Removes the specified permission from this ACL entry.
80f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param permission
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the permission to be removed.
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the permission is removed, {@code false} if the permission was
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         not in this entry.
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    boolean removePermission(Permission permission);
87f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Checks whether the specified permission is in this ACL entry.
90f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param permission
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the permission to check.
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the permission is in this entry, otherwise {@code false}.
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    boolean checkPermission(Permission permission);
96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the list of permissions of this ACL entry.
99f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the list of permissions of this ACL entry,
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Enumeration<Permission> permissions();
103f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the string representation of this ACL entry.
106f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the string representation of this ACL entry.
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    String toString();
110f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Clones this ACL entry instance.
113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a copy of this entry.
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Object clone();
117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
119