We can use jQuery and REST API to get subsites base on current user permission. Add the code below into a script editor web part into home page.
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function () {
ExecuteOrDelayUntilScriptLoaded(function(){
if(IsAdminUser()){
GetAllSubSites();
}
}, "sp.js");
});
function IsAdminUser() {
var isAdmin=false;
//Permission for admin to show or hide the entries on memory board using ShowOnHomePage Field
var perm = new SP.BasePermissions();
perm.set(SP.PermissionKind.manageWeb);
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/doesuserhavepermissions(@v)?@v={'High':'" + perm.$E_1.toString() + "', 'Low':'" + perm.$D_1.toString() + "'}",
type: "GET",
headers: { "accept": "application/json;odata=verbose" },
async:false,
success: function (data) {
var d = data.d.DoesUserHavePermissions;
isAdmin=d;
},
error: function (err) {
console.log(JSON.stringify(err));
}
});
return isAdmin;
}
function GetAllSubSites(){
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/Web/GetSubwebsFilteredForCurrentUser(nWebTemplateFilter=-1)?$filter=WebTemplate ne 'APP'",
method: "GET",
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(data) {
var subSites = data.d.results;
var tempValue = "<h2>Sub sites</h2><br/>";
subSites.forEach(function(site) {
tempValue += "<p><a href='"+site.ServerRelativeUrl+"'>"+site.Title+"</a></p>";
});
$("#AllSubSites").html(tempValue);
},
error: function(data) {
console.log(data);
}
});
}
</script>
<div id="AllSubSites"/>