@quenty/permissionprovider 9.0.0-canary.331.7eefa75.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +151 -1
- package/LICENSE.md +1 -1
- package/package.json +13 -10
- package/src/Client/PermissionServiceClient.lua +17 -2
- package/src/Client/Providers/PermissionProviderClient.lua +10 -1
- package/src/Server/PermissionService.lua +69 -1
- package/src/Server/Providers/BasePermissionProvider.lua +43 -26
- package/src/Server/Providers/CreatorPermissionProvider.lua +14 -13
- package/src/Server/Providers/GroupPermissionProvider.lua +22 -10
- package/src/Shared/PermissionLevel.lua +12 -0
- package/src/Shared/PermissionLevelUtils.lua +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,157 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
# [9.0.0
|
|
6
|
+
# [9.0.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.21.0...@quenty/permissionprovider@9.0.0) (2023-10-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [8.21.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.20.0...@quenty/permissionprovider@8.21.0) (2023-09-21)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [8.20.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.19.0...@quenty/permissionprovider@8.20.0) (2023-09-04)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# [8.19.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.18.0...@quenty/permissionprovider@8.19.0) (2023-08-23)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
* Add PermissionService:PromiseIsPermissionLevel(player, permissionLevel) ([2297438](https://github.com/Quenty/NevermoreEngine/commit/229743882002800c917e5fd131f81b4f7a36dc89))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# [8.18.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.17.1...@quenty/permissionprovider@8.18.0) (2023-07-28)
|
|
42
|
+
|
|
43
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## [8.17.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.17.0...@quenty/permissionprovider@8.17.1) (2023-07-18)
|
|
50
|
+
|
|
51
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# [8.17.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.16.1...@quenty/permissionprovider@8.17.0) (2023-07-15)
|
|
58
|
+
|
|
59
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## [8.16.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.16.0...@quenty/permissionprovider@8.16.1) (2023-07-11)
|
|
66
|
+
|
|
67
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# [8.16.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.15.1...@quenty/permissionprovider@8.16.0) (2023-07-10)
|
|
74
|
+
|
|
75
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
## [8.15.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.15.0...@quenty/permissionprovider@8.15.1) (2023-07-03)
|
|
82
|
+
|
|
83
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# [8.15.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.14.0...@quenty/permissionprovider@8.15.0) (2023-06-24)
|
|
90
|
+
|
|
91
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# [8.14.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.13.0...@quenty/permissionprovider@8.14.0) (2023-06-17)
|
|
98
|
+
|
|
99
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# [8.13.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.12.0...@quenty/permissionprovider@8.13.0) (2023-05-26)
|
|
106
|
+
|
|
107
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# [8.12.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.11.0...@quenty/permissionprovider@8.12.0) (2023-04-24)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
### Features
|
|
117
|
+
|
|
118
|
+
* Add PromiseIsCreator and PromiseIsAdmin utility helper methods on PermissionService ([179ed15](https://github.com/Quenty/NevermoreEngine/commit/179ed153a3c6329417569cfff93310a0e862bc1d))
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# [8.11.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.10.1...@quenty/permissionprovider@8.11.0) (2023-04-10)
|
|
125
|
+
|
|
126
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
## [8.10.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.10.0...@quenty/permissionprovider@8.10.1) (2023-04-07)
|
|
133
|
+
|
|
134
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
# [8.10.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.9.0...@quenty/permissionprovider@8.10.0) (2023-03-31)
|
|
141
|
+
|
|
142
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# [8.9.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.8.0...@quenty/permissionprovider@8.9.0) (2023-03-05)
|
|
149
|
+
|
|
150
|
+
**Note:** Version bump only for package @quenty/permissionprovider
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
# [8.8.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@8.7.0...@quenty/permissionprovider@8.8.0) (2023-02-27)
|
|
7
157
|
|
|
8
158
|
**Note:** Version bump only for package @quenty/permissionprovider
|
|
9
159
|
|
package/LICENSE.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/permissionprovider",
|
|
3
|
-
"version": "9.0.0
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"description": "Permission provider for Roblox, including authenticating against group membership",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,17 +25,20 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/baseobject": "
|
|
29
|
-
"@quenty/
|
|
30
|
-
"@quenty/
|
|
31
|
-
"@quenty/
|
|
32
|
-
"@quenty/
|
|
33
|
-
"@quenty/
|
|
34
|
-
"@quenty/
|
|
35
|
-
"@quenty/
|
|
28
|
+
"@quenty/baseobject": "^7.0.0",
|
|
29
|
+
"@quenty/brio": "^9.0.0",
|
|
30
|
+
"@quenty/grouputils": "^7.0.0",
|
|
31
|
+
"@quenty/loader": "^7.0.0",
|
|
32
|
+
"@quenty/maid": "^2.6.0",
|
|
33
|
+
"@quenty/playerutils": "^3.0.0",
|
|
34
|
+
"@quenty/promise": "^7.0.0",
|
|
35
|
+
"@quenty/remoting": "^7.0.0",
|
|
36
|
+
"@quenty/rx": "^8.0.0",
|
|
37
|
+
"@quenty/servicebag": "^7.0.0",
|
|
38
|
+
"@quenty/table": "^3.3.0"
|
|
36
39
|
},
|
|
37
40
|
"publishConfig": {
|
|
38
41
|
"access": "public"
|
|
39
42
|
},
|
|
40
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "fdeae46099587019ec5fc15317dc673aed379400"
|
|
41
44
|
}
|
|
@@ -23,7 +23,22 @@ PermissionServiceClient.ServiceName = "PermissionServiceClient"
|
|
|
23
23
|
@param _serviceBag ServiceBag
|
|
24
24
|
]=]
|
|
25
25
|
function PermissionServiceClient:Init(_serviceBag)
|
|
26
|
-
self.
|
|
26
|
+
self._providerPromise = Promise.resolved(PermissionProviderClient.new(PermissionProviderConstants.DEFAULT_REMOTE_FUNCTION_NAME))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
--[=[
|
|
30
|
+
Returns whether the player is an admin.
|
|
31
|
+
|
|
32
|
+
@param player Player | nil
|
|
33
|
+
@return Promise<boolean>
|
|
34
|
+
]=]
|
|
35
|
+
function PermissionServiceClient:PromiseIsAdmin(player)
|
|
36
|
+
assert((typeof(player) == "Instance" and player:IsA("Player")) or player == nil, "Bad player")
|
|
37
|
+
|
|
38
|
+
return self:PromisePermissionProvider()
|
|
39
|
+
:Then(function(permissionProvider)
|
|
40
|
+
return permissionProvider:PromiseIsAdmin(player)
|
|
41
|
+
end)
|
|
27
42
|
end
|
|
28
43
|
|
|
29
44
|
--[=[
|
|
@@ -31,7 +46,7 @@ end
|
|
|
31
46
|
@return Promise<PermissionProviderClient>
|
|
32
47
|
]=]
|
|
33
48
|
function PermissionServiceClient:PromisePermissionProvider()
|
|
34
|
-
return
|
|
49
|
+
return self._providerPromise
|
|
35
50
|
end
|
|
36
51
|
|
|
37
52
|
return PermissionServiceClient
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
local require = require(script.Parent.loader).load(script)
|
|
9
9
|
|
|
10
|
+
local Players = game:GetService("Players")
|
|
11
|
+
|
|
10
12
|
local PermissionProviderConstants = require("PermissionProviderConstants")
|
|
11
13
|
local Promise = require("Promise")
|
|
12
14
|
local PromiseGetRemoteFunction = require("PromiseGetRemoteFunction")
|
|
@@ -25,9 +27,16 @@ end
|
|
|
25
27
|
|
|
26
28
|
--[=[
|
|
27
29
|
Returns whether the local player is an admin.
|
|
30
|
+
|
|
31
|
+
@param player Player | nil
|
|
28
32
|
@return Promise<boolean>
|
|
29
33
|
]=]
|
|
30
|
-
function PermissionProviderClient:PromiseIsAdmin()
|
|
34
|
+
function PermissionProviderClient:PromiseIsAdmin(player)
|
|
35
|
+
player = player or Players.LocalPlayer
|
|
36
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
37
|
+
|
|
38
|
+
assert(player == Players.LocalPlayer, "We only support local player for now")
|
|
39
|
+
|
|
31
40
|
if self._cachedAdminPromise then
|
|
32
41
|
return self._cachedAdminPromise
|
|
33
42
|
end
|
|
@@ -26,10 +26,15 @@ local require = require(script.Parent.loader).load(script)
|
|
|
26
26
|
|
|
27
27
|
local CreatorPermissionProvider = require("CreatorPermissionProvider")
|
|
28
28
|
local GroupPermissionProvider = require("GroupPermissionProvider")
|
|
29
|
+
local Maid = require("Maid")
|
|
30
|
+
local PermissionLevel = require("PermissionLevel")
|
|
29
31
|
local PermissionProviderConstants = require("PermissionProviderConstants")
|
|
30
32
|
local PermissionProviderUtils = require("PermissionProviderUtils")
|
|
31
33
|
local Promise = require("Promise")
|
|
32
|
-
local
|
|
34
|
+
local Rx = require("Rx")
|
|
35
|
+
local RxBrioUtils = require("RxBrioUtils")
|
|
36
|
+
local RxPlayerUtils = require("RxPlayerUtils")
|
|
37
|
+
local PermissionLevelUtils = require("PermissionLevelUtils")
|
|
33
38
|
|
|
34
39
|
local PermissionService = {}
|
|
35
40
|
PermissionService.ServiceName = "PermissionService"
|
|
@@ -92,6 +97,69 @@ function PermissionService:PromisePermissionProvider()
|
|
|
92
97
|
return self._promise
|
|
93
98
|
end
|
|
94
99
|
|
|
100
|
+
--[=[
|
|
101
|
+
Returns whether the player is an admin.
|
|
102
|
+
@param player Player
|
|
103
|
+
@return Promise<boolean>
|
|
104
|
+
]=]
|
|
105
|
+
function PermissionService:PromiseIsAdmin(player)
|
|
106
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "bad player")
|
|
107
|
+
|
|
108
|
+
return self:PromiseIsPermissionLevel(player, PermissionLevel.ADMIN)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
--[=[
|
|
112
|
+
Returns whether the player is a creator.
|
|
113
|
+
@param player Player
|
|
114
|
+
@return Promise<boolean>
|
|
115
|
+
]=]
|
|
116
|
+
function PermissionService:PromiseIsCreator(player)
|
|
117
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "bad player")
|
|
118
|
+
|
|
119
|
+
return self:PromiseIsPermissionLevel(player, PermissionLevel.CREATOR)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
--[=[
|
|
123
|
+
Returns whether the player is a creator.
|
|
124
|
+
@param player Player
|
|
125
|
+
@param permissionLevel PermissionLevel
|
|
126
|
+
@return Promise<boolean>
|
|
127
|
+
]=]
|
|
128
|
+
function PermissionService:PromiseIsPermissionLevel(player, permissionLevel)
|
|
129
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "bad player")
|
|
130
|
+
assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
|
|
131
|
+
|
|
132
|
+
return self:PromisePermissionProvider()
|
|
133
|
+
:Then(function(permissionProvider)
|
|
134
|
+
return permissionProvider:PromiseIsPermissionLevel(player, permissionLevel)
|
|
135
|
+
end)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
--[=[
|
|
139
|
+
Observe all creators in the game
|
|
140
|
+
|
|
141
|
+
@param permissionLevel PermissionLevel
|
|
142
|
+
@return Observable<Brio<Player>>
|
|
143
|
+
]=]
|
|
144
|
+
function PermissionService:ObservePermissionedPlayersBrio(permissionLevel)
|
|
145
|
+
assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
|
|
146
|
+
|
|
147
|
+
return RxPlayerUtils.observePlayersBrio():Pipe({
|
|
148
|
+
RxBrioUtils.flatMapBrio(function(player)
|
|
149
|
+
return Rx.fromPromise(self:PromiseIsPermissionLevel(player, permissionLevel))
|
|
150
|
+
:Pipe({
|
|
151
|
+
Rx.switchMap(function(hasPermission)
|
|
152
|
+
if hasPermission then
|
|
153
|
+
return Rx.of(player)
|
|
154
|
+
else
|
|
155
|
+
return Rx.EMPTY
|
|
156
|
+
end
|
|
157
|
+
end)
|
|
158
|
+
})
|
|
159
|
+
end);
|
|
160
|
+
})
|
|
161
|
+
end
|
|
162
|
+
|
|
95
163
|
function PermissionService:Destroy()
|
|
96
164
|
self._maid:DoCleaning()
|
|
97
165
|
self._provider = nil
|
|
@@ -8,6 +8,8 @@ local require = require(script.Parent.loader).load(script)
|
|
|
8
8
|
|
|
9
9
|
local BaseObject = require("BaseObject")
|
|
10
10
|
local GetRemoteFunction = require("GetRemoteFunction")
|
|
11
|
+
local PermissionLevel = require("PermissionLevel")
|
|
12
|
+
local PermissionLevelUtils = require("PermissionLevelUtils")
|
|
11
13
|
local Table = require("Table")
|
|
12
14
|
|
|
13
15
|
local BasePermissionProvider = setmetatable({}, BaseObject)
|
|
@@ -44,14 +46,51 @@ end
|
|
|
44
46
|
--[=[
|
|
45
47
|
Returns whether the player is a creator.
|
|
46
48
|
@param player Player
|
|
49
|
+
@param permissionLevel PermissionLevel
|
|
47
50
|
@return Promise<boolean>
|
|
48
51
|
]=]
|
|
49
|
-
function BasePermissionProvider:
|
|
52
|
+
function BasePermissionProvider:PromiseIsPermissionLevel(player, permissionLevel)
|
|
50
53
|
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
54
|
+
assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
|
|
51
55
|
|
|
52
56
|
error("Not implemented")
|
|
53
57
|
end
|
|
54
58
|
|
|
59
|
+
--[=[
|
|
60
|
+
Returns whether the player is a creator.
|
|
61
|
+
@param player Player
|
|
62
|
+
@param permissionLevel PermissionLevel
|
|
63
|
+
@return Promise<boolean>
|
|
64
|
+
]=]
|
|
65
|
+
function BasePermissionProvider:IsPermissionLevel(player, permissionLevel)
|
|
66
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
67
|
+
assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
|
|
68
|
+
|
|
69
|
+
local promise = self:PromiseIsPermissionLevel(player, permissionLevel)
|
|
70
|
+
if promise:IsPending() then
|
|
71
|
+
return false -- We won't yield for this
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
local ok, result = promise:Yield()
|
|
75
|
+
if not ok then
|
|
76
|
+
warn("[BasePermissionProvider] - %s"):format(tostring(result))
|
|
77
|
+
return false
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
return result
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
--[=[
|
|
84
|
+
Returns whether the player is a creator.
|
|
85
|
+
@param player Player
|
|
86
|
+
@return Promise<boolean>
|
|
87
|
+
]=]
|
|
88
|
+
function BasePermissionProvider:PromiseIsCreator(player)
|
|
89
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
90
|
+
|
|
91
|
+
return self:PromiseIsPermissionLevel(player, PermissionLevel.CREATOR)
|
|
92
|
+
end
|
|
93
|
+
|
|
55
94
|
--[=[
|
|
56
95
|
Returns whether the player is an admin.
|
|
57
96
|
@param player Player
|
|
@@ -60,7 +99,7 @@ end
|
|
|
60
99
|
function BasePermissionProvider:PromiseIsAdmin(player)
|
|
61
100
|
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
62
101
|
|
|
63
|
-
|
|
102
|
+
return self:PromiseIsPermissionLevel(player, PermissionLevel.ADMIN)
|
|
64
103
|
end
|
|
65
104
|
|
|
66
105
|
--[=[
|
|
@@ -76,18 +115,7 @@ end
|
|
|
76
115
|
function BasePermissionProvider:IsCreator(player)
|
|
77
116
|
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
78
117
|
|
|
79
|
-
|
|
80
|
-
if promise:IsPending() then
|
|
81
|
-
return false -- We won't yield for this
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
local ok, result = promise:Yield()
|
|
85
|
-
if not ok then
|
|
86
|
-
warn("[BasePermissionProvider] - %s"):format(tostring(result))
|
|
87
|
-
return false
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
return result
|
|
118
|
+
return self:IsCreator(player, PermissionLevel.CREATOR)
|
|
91
119
|
end
|
|
92
120
|
|
|
93
121
|
--[=[
|
|
@@ -103,18 +131,7 @@ end
|
|
|
103
131
|
function BasePermissionProvider:IsAdmin(player)
|
|
104
132
|
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
105
133
|
|
|
106
|
-
|
|
107
|
-
if promise:IsPending() then
|
|
108
|
-
return false -- We won't yield for this
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
local ok, result = promise:Yield()
|
|
112
|
-
if not ok then
|
|
113
|
-
warn("[BasePermissionProvider] - %s"):format(tostring(result))
|
|
114
|
-
return false
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
return result
|
|
134
|
+
return self:IsPermissionLevel(player, PermissionLevel.ADMIN)
|
|
118
135
|
end
|
|
119
136
|
|
|
120
137
|
function BasePermissionProvider:_onServerInvoke(player)
|
|
@@ -12,6 +12,8 @@ local RunService = game:GetService("RunService")
|
|
|
12
12
|
local BasePermissionProvider = require("BasePermissionProvider")
|
|
13
13
|
local PermissionProviderConstants = require("PermissionProviderConstants")
|
|
14
14
|
local Promise = require("Promise")
|
|
15
|
+
local PermissionLevel = require("PermissionLevel")
|
|
16
|
+
local PermissionLevelUtils = require("PermissionLevelUtils")
|
|
15
17
|
|
|
16
18
|
local CreatorPermissionProvider = setmetatable({}, BasePermissionProvider)
|
|
17
19
|
CreatorPermissionProvider.ClassName = "CreatorPermissionProvider"
|
|
@@ -31,23 +33,22 @@ function CreatorPermissionProvider.new(config)
|
|
|
31
33
|
end
|
|
32
34
|
|
|
33
35
|
--[=[
|
|
34
|
-
Returns whether the player is a
|
|
35
|
-
@param player Player
|
|
36
|
-
@return Promise<boolean>
|
|
37
|
-
]=]
|
|
38
|
-
function CreatorPermissionProvider:PromiseIsCreator(player)
|
|
39
|
-
return Promise.resolved(player.UserId == self._userId
|
|
40
|
-
or RunService:IsStudio())
|
|
41
|
-
end
|
|
36
|
+
Returns whether the player is at a specific permission level.
|
|
42
37
|
|
|
43
|
-
--[=[
|
|
44
|
-
Returns whether the player is an admin.
|
|
45
38
|
@param player Player
|
|
39
|
+
@param permissionLevel PermissionLevel
|
|
46
40
|
@return Promise<boolean>
|
|
47
41
|
]=]
|
|
48
|
-
function CreatorPermissionProvider:
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
function CreatorPermissionProvider:PromiseIsPermissionLevel(player, permissionLevel)
|
|
43
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
44
|
+
assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
|
|
45
|
+
|
|
46
|
+
if permissionLevel == PermissionLevel.ADMIN
|
|
47
|
+
or permissionLevel == PermissionLevel.CREATOR then
|
|
48
|
+
return Promise.resolved(player.UserId == self._userId or RunService:IsStudio())
|
|
49
|
+
else
|
|
50
|
+
error("Unknown permissionLevel")
|
|
51
|
+
end
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
return CreatorPermissionProvider
|
|
@@ -9,10 +9,12 @@ local require = require(script.Parent.loader).load(script)
|
|
|
9
9
|
|
|
10
10
|
local Players = game:GetService("Players")
|
|
11
11
|
|
|
12
|
-
local PermissionProviderConstants = require("PermissionProviderConstants")
|
|
13
|
-
local Promise = require("Promise")
|
|
14
12
|
local BasePermissionProvider = require("BasePermissionProvider")
|
|
15
13
|
local GroupUtils = require("GroupUtils")
|
|
14
|
+
local PermissionLevel = require("PermissionLevel")
|
|
15
|
+
local PermissionLevelUtils = require("PermissionLevelUtils")
|
|
16
|
+
local PermissionProviderConstants = require("PermissionProviderConstants")
|
|
17
|
+
local Promise = require("Promise")
|
|
16
18
|
|
|
17
19
|
local GroupPermissionProvider = setmetatable({}, BasePermissionProvider)
|
|
18
20
|
GroupPermissionProvider.__index = GroupPermissionProvider
|
|
@@ -68,11 +70,26 @@ function GroupPermissionProvider:Start()
|
|
|
68
70
|
end
|
|
69
71
|
|
|
70
72
|
--[=[
|
|
71
|
-
Returns whether the player is a
|
|
73
|
+
Returns whether the player is at a specific permission level
|
|
74
|
+
|
|
72
75
|
@param player Player
|
|
76
|
+
@param permissionLevel PermissionLevel
|
|
73
77
|
@return Promise<boolean>
|
|
74
78
|
]=]
|
|
75
|
-
function GroupPermissionProvider:
|
|
79
|
+
function GroupPermissionProvider:PromiseIsPermissionLevel(player, permissionLevel)
|
|
80
|
+
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
81
|
+
assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
|
|
82
|
+
|
|
83
|
+
if permissionLevel == PermissionLevel.ADMIN then
|
|
84
|
+
return self:_promiseIsAdmin(player)
|
|
85
|
+
elseif permissionLevel == PermissionLevel.CREATOR then
|
|
86
|
+
return self:_promiseIsCreator(player)
|
|
87
|
+
else
|
|
88
|
+
error("Unknown permissionLevel")
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
function GroupPermissionProvider:_promiseIsCreator(player)
|
|
76
93
|
assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
|
|
77
94
|
assert(player:IsDescendantOf(game), "Bad player")
|
|
78
95
|
|
|
@@ -86,12 +103,7 @@ function GroupPermissionProvider:PromiseIsCreator(player)
|
|
|
86
103
|
end)
|
|
87
104
|
end
|
|
88
105
|
|
|
89
|
-
|
|
90
|
-
Returns whether the player is an admin.
|
|
91
|
-
@param player Player
|
|
92
|
-
@return Promise<boolean>
|
|
93
|
-
]=]
|
|
94
|
-
function GroupPermissionProvider:PromiseIsAdmin(player)
|
|
106
|
+
function GroupPermissionProvider:_promiseIsAdmin(player)
|
|
95
107
|
assert(player:IsDescendantOf(game))
|
|
96
108
|
|
|
97
109
|
-- really not saving much time.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
--[=[
|
|
2
|
+
@class PermissionLevelUtils
|
|
3
|
+
]=]
|
|
4
|
+
|
|
5
|
+
local require = require(script.Parent.loader).load(script)
|
|
6
|
+
|
|
7
|
+
local PermissionLevel = require("PermissionLevel")
|
|
8
|
+
|
|
9
|
+
local PermissionLevelUtils = {}
|
|
10
|
+
|
|
11
|
+
local ALLOWED = {}
|
|
12
|
+
for _, item in pairs(PermissionLevel) do
|
|
13
|
+
ALLOWED[item] = true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
function PermissionLevelUtils.isPermissionLevel(permissionLevel)
|
|
17
|
+
return ALLOWED[permissionLevel]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
return PermissionLevelUtils
|