@@ -27,25 +27,63 @@ class FSReqBase;
2727
2828namespace permission {
2929
30- #define THROW_IF_INSUFFICIENT_PERMISSIONS (env, perm_, resource_ , ...) \
30+ #define THROW_IF_INSUFFICIENT_PERMISSIONS (env, perm, resource , ...) \
3131 do { \
32- if (!env->permission ()->is_granted (env, perm_, resource_)) [[unlikely]] { \
32+ node::Environment* env__ = (env); \
33+ const node::permission::PermissionScope perm__ = (perm); \
34+ const auto resource__ = (resource); \
35+ if (!env__->permission ()->is_granted (env__, perm__, resource__)) \
36+ [[unlikely]] { \
3337 node::permission::Permission::ThrowAccessDenied ( \
34- (env), perm_, resource_); \
38+ env__, perm__, resource__); \
3539 return __VA_ARGS__; \
3640 } \
3741 } while (0 )
3842
3943#define ASYNC_THROW_IF_INSUFFICIENT_PERMISSIONS ( \
40- env, wrap, perm_, resource_ , ...) \
44+ env, wrap, perm, resource , ...) \
4145 do { \
42- if (!env->permission ()->is_granted (env, perm_, resource_)) [[unlikely]] { \
46+ node::Environment* env__ = (env); \
47+ const node::permission::PermissionScope perm__ = (perm); \
48+ const auto resource__ = (resource); \
49+ if (!env__->permission ()->is_granted (env__, perm__, resource__)) \
50+ [[unlikely]] { \
4351 node::permission::Permission::AsyncThrowAccessDenied ( \
44- (env), wrap, perm_, resource_); \
52+ env__, ( wrap), perm__, resource__); \
4553 return __VA_ARGS__; \
4654 } \
4755 } while (0 )
4856
57+ #define ERR_ACCESS_DENIED_IF_INSUFFICIENT_PERMISSIONS ( \
58+ env, perm, resource, args, ...) \
59+ do { \
60+ node::Environment* env__ = (env); \
61+ const node::permission::PermissionScope perm__ = (perm); \
62+ const auto resource__ = (resource); \
63+ if (!env__->permission ()->is_granted (env__, perm__, resource__)) \
64+ [[unlikely]] { \
65+ Local<Value> err_access; \
66+ if (node::permission::CreateAccessDeniedError (env__, perm__, resource__) \
67+ .ToLocal (&err_access)) { \
68+ args.GetReturnValue ().Set (err_access); \
69+ } else { \
70+ args.GetReturnValue ().Set (UV_EACCES); \
71+ } \
72+ return __VA_ARGS__; \
73+ } \
74+ } while (0 )
75+
76+ #define SET_INSUFFICIENT_PERMISSION_ERROR_CALLBACK (scope ) \
77+ void InsufficientPermissionError (std::string_view resource) { \
78+ v8::HandleScope handle_scope (env ()->isolate ()); \
79+ v8::Context::Scope context_scope (env ()->context ()); \
80+ v8::Local<v8::Value> arg; \
81+ if (!permission::CreateAccessDeniedError (env (), (scope), resource) \
82+ .ToLocal (&arg)) { \
83+ } \
84+ MakeCallback (env ()->oncomplete_string (), 1 , &arg); \
85+ }
86+
4987class Permission {
5088 public:
5189 Permission ();
0 commit comments