12#include "syscache.hpp"
19 role() :
oid(::GetCurrentRoleId() != InvalidOid ? ::GetCurrentRoleId() : ::GetUserId()) {}
20 role(std::string role_name) :
oid(
ffi_guard{::get_role_oid}(role_name.c_str(),
false)) {}
22 std::string_view
name()
const {
return ffi_guard{::GetUserNameFromId}(*
this,
false); }
24 bool is_member(
role &other,
bool ignore_superuser =
false) {
25 return ffi_guard{ignore_superuser ? ::is_member_of_role_nosuper : ::is_member_of_role}(*
this,
31 static bool is(
const type &t) {
return t.oid == OIDOID || t.oid == REGROLEOID; }
32 static constexpr type type_for() {
return type{.oid = REGROLEOID}; }
37 return static_cast<role>(d.operator const ::Datum &());
43enum security_context_flag :
int {
44 security_none = 0x0000,
45 security_local_user_id_change = SECURITY_LOCAL_USERID_CHANGE,
46 security_restricted_operation = SECURITY_RESTRICTED_OPERATION,
47 security_noforce_rls = SECURITY_NOFORCE_RLS
50constexpr security_context_flag operator|(security_context_flag a, security_context_flag b) {
51 return static_cast<security_context_flag
>(
static_cast<int>(a) |
static_cast<int>(b));
54constexpr security_context_flag operator&(security_context_flag a, security_context_flag b) {
55 return static_cast<security_context_flag
>(
static_cast<int>(a) &
static_cast<int>(b));
58constexpr security_context_flag &operator|=(security_context_flag &a, security_context_flag b) {
64 ::GetUserIdAndSecContext(&user, &ctx);
65 ::SetUserIdAndSecContext(role_, context);
69 static bool in_local_user_id_change() { return ::InLocalUserIdChange(); }
70 static bool in_security_restricted_operation() { return ::InSecurityRestrictedOperation(); }
71 static bool in_no_force_rls_operation() { return ::InNoForceRLSOperation(); }
A trait to convert from and into a cppgres::datum.
Definition: datum.hpp:114
static T from_datum(const datum &, const oid, std::optional< memory_context > context=std::nullopt)=delete
Convert from a datum.
static datum into_datum(const T &d)=delete
Convert datum into a type.
Definition: datum.hpp:146
Postgres type.
Definition: type.hpp:20