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) && !defined(SAGA_EXPORT_PERMISSIONS)
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
00113 void permissions_allow(std::string permission_id, int flag)
00114 {
00115 permissions_allowpriv (permission_id, flag,
00116 saga::task_base::Sync());
00117 }
00119 SAGA_CALL_PUB_2_DEF_0(permissions_allow, std::string, int)
00121
00122
00129 void permissions_deny(std::string permission_id, int flag)
00130 {
00131 permissions_denypriv (permission_id, flag,
00132 saga::task_base::Sync());
00133 }
00135 SAGA_CALL_PUB_2_DEF_0(permissions_deny, std::string, int)
00137
00138
00145 bool permissions_check(std::string permission_id, int flag) const
00146 {
00147 saga::task t = permissions_checkpriv (permission_id, flag,
00148 saga::task_base::Sync());
00149 return t.get_result<bool>();
00150 }
00152 SAGA_CALL_CONST_PUB_2_DEF_0(permissions_check, std::string, int)
00154
00155
00161 std::string get_owner() const
00162 {
00163 saga::task t = get_ownerpriv (saga::task_base::Sync());
00164 return t.get_result<std::string>();
00165 }
00167 SAGA_CALL_CONST_PUB_0_DEF_0(get_owner)
00169
00170
00176 std::string get_group() const
00177 {
00178 saga::task t = get_grouppriv (saga::task_base::Sync());
00179 return t.get_result<std::string>();
00180 }
00182 SAGA_CALL_CONST_PUB_0_DEF_0(get_group)
00184 };
00185
00187 }}
00188
00189 #endif
00190
00191