00001
00002
00003
00004
00005
00006 #ifndef SAGA_SAGA_DETAIL_PERMISSIONS_HPP
00007 #define SAGA_SAGA_DETAIL_PERMISSIONS_HPP
00008
00009 #include <string>
00010
00011
00012 #include <saga/saga/util.hpp>
00013 #include <saga/saga/base.hpp>
00014 #include <saga/saga/monitorable.hpp>
00015 #include <saga/saga/call.hpp>
00016 #include <saga/saga/task.hpp>
00017
00018
00019 #include <saga/saga-defs.hpp>
00020
00021
00022 #if defined(BOOST_MSVC)
00023 #pragma warning(push)
00024 #pragma warning(disable : 4251 4231 4660)
00025 #endif
00026
00028
00029 #if !defined (SAGA_CREATE_PREPROCESSED_FILES)
00030
00031 # if defined(SAGA_ENGINE_EXPORTS) || defined(SAGA_PERMISSIONS_EXPORTS)
00032 # define SAGA_EXPORT_PERMISSIONS SAGA_SYMBOL_EXPORT
00033 # elif !defined (SAGA_NO_IMPORT_PERMISSIONS) && !defined(BUILD_SAGA_LITE)
00034 # define SAGA_EXPORT_PERMISSIONS SAGA_SYMBOL_IMPORT
00035 # else
00036 # define SAGA_EXPORT_PERMISSIONS
00037 # endif
00038
00039 #endif // !SAGA_CREATE_PREPROCESSED_FILES
00040
00042 namespace saga { namespace detail
00043 {
00046 template <typename Derived, typename Tag>
00047 struct SAGA_EXPORT_PERMISSIONS permissions_priv
00048 {
00049 static saga::task permissions_allow (Derived const& this_,
00050 std::string id, int p);
00051 static saga::task permissions_deny (Derived const& this_,
00052 std::string id, int p);
00053 static saga::task permissions_check (Derived const& this_,
00054 std::string id, int p);
00055
00056 static saga::task get_owner (Derived const& this_);
00057 static saga::task get_group (Derived const& this_);
00058 };
00061
00062
00067 template <typename Derived>
00068 struct SAGA_EXPORT_PERMISSIONS permissions
00069 {
00070 private:
00071 template <typename Tag>
00072 saga::task permissions_allowpriv (std::string id, int p, Tag) const
00073 { return permissions_priv<Derived, Tag>::permissions_allow(derived(), id, p); }
00074
00075 template <typename Tag>
00076 saga::task permissions_denypriv (std::string id, int p, Tag) const
00077 { return permissions_priv<Derived, Tag>::permissions_deny(derived(), id, p); }
00078
00079 template <typename Tag>
00080 saga::task permissions_checkpriv (std::string id, int p, Tag) const
00081 { return permissions_priv<Derived, Tag>::permissions_check(derived(), id, p); }
00082
00083 template <typename Tag>
00084 saga::task get_ownerpriv (Tag) const
00085 { return permissions_priv<Derived, Tag>::get_owner(derived()); }
00086
00087 template <typename Tag>
00088 saga::task get_grouppriv (Tag) const
00089 { return permissions_priv<Derived, Tag>::get_group(derived()); }
00090
00091 public:
00093 impl::permissions_interface* get_perm (void);
00094 impl::permissions_interface* get_perm (void) const;
00096
00097 protected:
00099 Derived& derived()
00100 { return static_cast<Derived&>(*this); }
00101 Derived const& derived() const
00102 { return static_cast<Derived const&>(*this); }
00104 public:
00105
00112 void permissions_allow(std::string permission_id, int flag)
00113 {
00114 permissions_allowpriv (permission_id, flag,
00115 saga::task_base::Sync());
00116 }
00118 SAGA_CALL_PUB_2_DEF_0(permissions_allow, std::string, int);
00120
00127 void permissions_deny(std::string permission_id, int flag)
00128 {
00129 permissions_denypriv (permission_id, flag,
00130 saga::task_base::Sync());
00131 }
00133 SAGA_CALL_PUB_2_DEF_0(permissions_deny, std::string, int);
00135
00142 bool permissions_check(std::string permission_id, int flag) const
00143 {
00144 saga::task t = permissions_checkpriv (permission_id, flag,
00145 saga::task_base::Sync());
00146 return t.get_result<bool>();
00147 }
00149 SAGA_CALL_CONST_PUB_2_DEF_0(permissions_check, std::string, int);
00151
00157 std::string get_owner() const
00158 {
00159 saga::task t = get_ownerpriv (saga::task_base::Sync());
00160 return t.get_result<std::string>();
00161 }
00163 SAGA_CALL_CONST_PUB_0_DEF_0(get_owner);
00165
00171 std::string get_group() const
00172 {
00173 saga::task t = get_grouppriv (saga::task_base::Sync());
00174 return t.get_result<std::string>();
00175 }
00177 SAGA_CALL_CONST_PUB_0_DEF_0(get_group);
00179 };
00180
00182 }}
00183
00184 #endif
00185
00186