Skip to content

Commit fa3badf

Browse files
authored
Merge pull request #112 from solid/user-roles
Added methods to filter panes based on user roles (Developer/PowerUser)
2 parents a2e4cde + 2717269 commit fa3badf

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/signin.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ module.exports = {
3434
checkUser, // Async
3535
currentUser, // Sync
3636
defaultTestUser, // Sync
37+
filterAvailablePanes, // Async
3738
findAppInstances,
3839
findOriginOwner,
40+
getUserRoles, // Async
3941
loadTypeIndexes,
4042
logIn,
4143
logInLoadProfile,
@@ -1287,3 +1289,26 @@ function newAppInstance (dom, appDetails, callback) {
12871289
div.appendChild(b)
12881290
return div
12891291
}
1292+
1293+
async function getUserRoles () {
1294+
const profile = await checkUser()
1295+
if (!profile) {
1296+
return []
1297+
}
1298+
const preferencesFile = UI.store.any(profile, ns.space('preferencesFile'), null, profile.doc())
1299+
if (!preferencesFile) {
1300+
return []
1301+
}
1302+
await UI.store.fetcher.load(preferencesFile)
1303+
return UI.store.each(profile, ns.rdf('type'), null, preferencesFile.doc())
1304+
}
1305+
1306+
async function filterAvailablePanes (panes) {
1307+
const userRoles = await getUserRoles()
1308+
return Object.values(panes).filter(pane => isMatchingAudience(pane, userRoles))
1309+
}
1310+
1311+
function isMatchingAudience (pane, userRoles) {
1312+
const audience = pane.audience || []
1313+
return audience.reduce((isMatch, audienceRole) => isMatch && userRoles.find(role => role.equals(audienceRole)), true)
1314+
}

0 commit comments

Comments
 (0)