blob: f13410581e6fef9022aebc4317719cb4ca52cfff [file] [log] [blame]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PERMISSION_BROKER_RULE_H_
#define PERMISSION_BROKER_RULE_H_
#include <string>
#include <base/macros.h>
namespace permission_broker {
// A Rule represents a single unit of policy used to decide to which paths
// access is granted. Each time a Rule processes a path it can return one of
// three values: |ALLOW|, |DENY|, or |IGNORE|. If a Rule returns |ALLOW|, it
// means that the policy it represents would allow access to the requested path.
// If |DENY| is returned, then the rule is explicitly denying access to the
// resource. |IGNORE| means that the Rule makes no decision one way or another.
class Rule {
public:
enum Result { ALLOW, DENY, IGNORE };
enum SpecialInterfaces { ANY_INTERFACE = -1 };
static const char *ResultToString(const Result &result);
virtual ~Rule() = default;
const std::string &name() const;
virtual Result Process(const std::string &path,
const int interface_id) = 0;
protected:
explicit Rule(const std::string &name);
private:
const std::string name_;
DISALLOW_COPY_AND_ASSIGN(Rule);
};
} // namespace permission_broker
#endif // PERMISSION_BROKER_RULE_H_