TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
Permisos.h
Veure la documentació d'aquest fitxer.
1 #if !defined(_PERMISOS_H_)
2 #define _PERMISOS_H_
3 
10 /*
11  * Copyright (c) 2012 Toni Corvera
12  *
13  * This file is part of TFCWeb.
14  *
15  * TFCWeb is free software: you can redistribute it and/or modify
16  * it under the terms of the GNU General Public License as published by
17  * the Free Software Foundation, either version 3 of the License, or
18  * (at your option) any later version.
19  *
20  * TFCWeb is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
27  */
28 
29 #include "PeticioHTTP.h"
30 
31 #include <iostream>
32 #include <boost/filesystem.hpp>
33 #include <boost/unordered_map.hpp>
34 
35 namespace tfc {
36 
38 enum Permis {
39  PRIVAT = 0x01,
40  PROTEGIT = 0x02,
41  LECTURA = 0x04,
42  ESCRIPTURA = 0x08,
43  EXECUCIO = 0x10
44 };
46 typedef unsigned short FlagsPermis;
47 
51 std::string nom_permis(FlagsPermis f);
52 
53 class Permisos;
54 
55 class Cerber {
56 public:
58 
69  explicit Cerber(FlagsPermis permis_per_defecte = LECTURA)
70  : per_defecte_(permis_per_defecte)
71  {
72  // buit
73  }
74 
75  Cerber(const Cerber & c)
76  : regles_(c.regles_),
78  {
79  // buit
80  }
81 
82  Cerber& operator=(const Cerber & c) {
83  regles_ = c.regles_;
85  return *this;
86  }
87 
100  void defineix_regla(const ruta_t & ruta, FlagsPermis perms);
101 
114  CodiEstatHTTP acces(const ruta_t & ruta, TipusPeticioHTTP t) const;
115 
120  FlagsPermis permis(const ruta_t & ruta) const;
121 
125  bool executable(const ruta_t & ruta) const;
126 private:
127  boost::unordered_map<ruta_t, FlagsPermis> regles_;
129 
130  // Impressió de les regles
131  friend std::ostream& operator<<(std::ostream&, const Cerber&);
132 };
133 
134 }
135 
136 #endif // _PERMISOS_H_
137 
138 // vim:set ts=4 et ai: //