@@ -27,25 +27,63 @@ class FSReqBase;
27
27
28
28
namespace permission {
29
29
30
- #define THROW_IF_INSUFFICIENT_PERMISSIONS (env, perm_, resource_ , ...) \
30
+ #define THROW_IF_INSUFFICIENT_PERMISSIONS (env, perm, resource , ...) \
31
31
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]] { \
33
37
node::permission::Permission::ThrowAccessDenied ( \
34
- (env), perm_, resource_); \
38
+ env__, perm__, resource__); \
35
39
return __VA_ARGS__; \
36
40
} \
37
41
} while (0 )
38
42
39
43
#define ASYNC_THROW_IF_INSUFFICIENT_PERMISSIONS ( \
40
- env, wrap, perm_, resource_ , ...) \
44
+ env, wrap, perm, resource , ...) \
41
45
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]] { \
43
51
node::permission::Permission::AsyncThrowAccessDenied ( \
44
- (env), wrap, perm_, resource_); \
52
+ env__, ( wrap), perm__, resource__); \
45
53
return __VA_ARGS__; \
46
54
} \
47
55
} while (0 )
48
56
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
+
49
87
class Permission {
50
88
public:
51
89
Permission ();
0 commit comments