User Authorization UI #24
Additional UI to help determining what effective authorization users have.
This commit is contained in:
@@ -1,39 +1,91 @@
|
||||
@model Disco.Web.Models.User.ShowModel
|
||||
@using Disco.Services.Authorization.Roles;
|
||||
@{
|
||||
Authorization.Require(Claims.User.ShowAuthorization);
|
||||
|
||||
var isDiscoAdmin = Authorization.Has(Claims.DiscoAdminAccount);
|
||||
|
||||
Html.BundleDeferred("~/Style/Fancytree");
|
||||
Html.BundleDeferred("~/ClientScripts/Modules/jQuery-Fancytree");
|
||||
}
|
||||
<div id="UserDetailTab-Authorization" class="UserPart">
|
||||
<div id="UserDetailTab-AuthorizationContainer">
|
||||
|
||||
<div id="UserDetailTab-AuthorizationContainer" class="clearfix">
|
||||
|
||||
@if (Model.ClaimNavigator != null)
|
||||
{
|
||||
<div id="Config_AuthRoles_Claims_Tree">
|
||||
<div id="UserDetailTab-Authorization_ClaimsTree_Container">
|
||||
<h3>Effective Permissions</h3>
|
||||
<div id="UserDetailTab-Authorization_ClaimsTree">
|
||||
</div>
|
||||
<script>
|
||||
(function(){
|
||||
var claimNodes = @(new HtmlString(Newtonsoft.Json.JsonConvert.SerializeObject(Model.ClaimNavigatorFancyTreeNodes)));
|
||||
|
||||
$(function(){
|
||||
var tree = $('#Config_AuthRoles_Claims_Tree').fancytree({
|
||||
var tree = $('#UserDetailTab-Authorization_ClaimsTree').fancytree({
|
||||
source: claimNodes,
|
||||
checkbox: true,
|
||||
selectMode: 3
|
||||
selectMode: 3,
|
||||
keyboard: false
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<span class="smallMessage">Calculated from authorization roles</span>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>NO ACCESS</div>
|
||||
<div id="UserDetailTab-Authorization_NoAccess">
|
||||
<h3>User Not Authorized</h3>
|
||||
<p>The user (<span class="code">@(Model.User.Id)</span>) is not authorized to access any authenticated components.</p>
|
||||
@if (isDiscoAdmin)
|
||||
{
|
||||
@Html.ActionLinkButton("Configure Authorization Roles", MVC.Config.AuthorizationRole.Index(null), null, "small")
|
||||
}
|
||||
</div>
|
||||
}
|
||||
<div id="UserDetailTab-Authorization_Membership">
|
||||
@if (Model.ClaimNavigator != null)
|
||||
{
|
||||
<h3>Associated Roles</h3>
|
||||
<ul id="UserDetailTab-Authorization_Membership_Roles">
|
||||
@foreach (var roleToken in Model.AuthorizationToken.RoleTokens.Cast<RoleToken>())
|
||||
{
|
||||
<li>@if (roleToken.Role.Id < 0)
|
||||
{
|
||||
<text>@roleToken.Role.Name <span class="code">[SYSTEM ROLE]</span></text>
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isDiscoAdmin)
|
||||
{
|
||||
@Html.ActionLink(roleToken.Role.Name, MVC.Config.AuthorizationRole.Index(roleToken.Role.Id))
|
||||
}
|
||||
else
|
||||
{
|
||||
@roleToken.Role.Name
|
||||
}
|
||||
}
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
<div id="UserDetailTab-Authorization_Membership_Groups_Container">
|
||||
<h4>Associated Active Directory Security Groups</h4>
|
||||
<ul id="UserDetailTab-Authorization_Membership_Groups">
|
||||
@foreach (var group in Model.AuthorizationToken.GroupMembership)
|
||||
{
|
||||
<li>@group</li>
|
||||
}
|
||||
</ul>
|
||||
<span class="smallMessage">[Note: Includes inherited groups]</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<script>
|
||||
$('#UserDetailTabItems').append('<li><a href="#UserDetailTab-Authorization">Authorization</a></li>');
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -29,6 +29,12 @@ namespace Disco.Web.Views.User.UserParts
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services.Authorization;
|
||||
|
||||
#line 2 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
using Disco.Services.Authorization.Roles;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
using Disco.Services.Web;
|
||||
using Disco.Web;
|
||||
using Disco.Web.Extensions;
|
||||
@@ -43,10 +49,12 @@ namespace Disco.Web.Views.User.UserParts
|
||||
public override void Execute()
|
||||
{
|
||||
|
||||
#line 2 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
#line 3 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
Authorization.Require(Claims.User.ShowAuthorization);
|
||||
|
||||
var isDiscoAdmin = Authorization.Has(Claims.DiscoAdminAccount);
|
||||
|
||||
Html.BundleDeferred("~/Style/Fancytree");
|
||||
Html.BundleDeferred("~/ClientScripts/Modules/jQuery-Fancytree");
|
||||
|
||||
@@ -63,16 +71,18 @@ WriteLiteral(">\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"UserDetailTab-AuthorizationContainer\"");
|
||||
|
||||
WriteLiteral(">\r\n \r\n");
|
||||
WriteLiteral(" class=\"clearfix\"");
|
||||
|
||||
WriteLiteral(">\r\n\r\n");
|
||||
|
||||
|
||||
#line 11 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
#line 14 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 11 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
#line 14 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
if (Model.ClaimNavigator != null)
|
||||
{
|
||||
|
||||
@@ -81,15 +91,17 @@ WriteLiteral(">\r\n \r\n");
|
||||
#line hidden
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" id=\"Config_AuthRoles_Claims_Tree\"");
|
||||
WriteLiteral(" id=\"UserDetailTab-Authorization_ClaimsTree_Container\"");
|
||||
|
||||
WriteLiteral(">\r\n </div>\r\n");
|
||||
WriteLiteral(">\r\n <h3>Effective Permissions</h3>\r\n <div");
|
||||
|
||||
WriteLiteral(" <script>\r\n (function(){\r\n " +
|
||||
" var claimNodes = ");
|
||||
WriteLiteral(" id=\"UserDetailTab-Authorization_ClaimsTree\"");
|
||||
|
||||
WriteLiteral(">\r\n </div>\r\n <script>\r\n (functio" +
|
||||
"n(){\r\n var claimNodes = ");
|
||||
|
||||
|
||||
#line 17 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
#line 22 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
Write(new HtmlString(Newtonsoft.Json.JsonConvert.SerializeObject(Model.ClaimNavigatorFancyTreeNodes)));
|
||||
|
||||
|
||||
@@ -98,18 +110,23 @@ WriteLiteral(" <script>\r\n (function(){\r\n
|
||||
WriteLiteral(@";
|
||||
|
||||
$(function(){
|
||||
var tree = $('#Config_AuthRoles_Claims_Tree').fancytree({
|
||||
var tree = $('#UserDetailTab-Authorization_ClaimsTree').fancytree({
|
||||
source: claimNodes,
|
||||
checkbox: true,
|
||||
selectMode: 3
|
||||
selectMode: 3,
|
||||
keyboard: false
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
");
|
||||
<span");
|
||||
|
||||
WriteLiteral(" class=\"smallMessage\"");
|
||||
|
||||
WriteLiteral(">Calculated from authorization roles</span>\r\n </div>\r\n");
|
||||
|
||||
|
||||
#line 28 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
#line 36 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -117,18 +134,246 @@ WriteLiteral(@";
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <div>NO ACCESS</div>\r\n");
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" id=\"UserDetailTab-Authorization_NoAccess\"");
|
||||
|
||||
WriteLiteral(">\r\n <h3>User Not Authorized</h3>\r\n <p>The user (<sp" +
|
||||
"an");
|
||||
|
||||
WriteLiteral(" class=\"code\"");
|
||||
|
||||
WriteLiteral(">");
|
||||
|
||||
|
||||
#line 32 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
#line 41 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
Write(Model.User.Id);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("</span>) is not authorized to access any authenticated components.</p>\r\n");
|
||||
|
||||
|
||||
#line 42 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 42 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
if (isDiscoAdmin)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 44 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
Write(Html.ActionLinkButton("Configure Authorization Roles", MVC.Config.AuthorizationRole.Index(null), null, "small"));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 44 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </div>\r\n");
|
||||
|
||||
|
||||
#line 47 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n\r\n </div>\r\n <script>\r\n $(\'#UserDetailTabItems\').append(\'<li><a hre" +
|
||||
"f=\"#UserDetailTab-Authorization\">Authorization</a></li>\');\r\n </script>\r\n</div" +
|
||||
">");
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" id=\"UserDetailTab-Authorization_Membership\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
|
||||
#line 49 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 49 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
if (Model.ClaimNavigator != null)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <h3>Associated Roles</h3>\r\n");
|
||||
|
||||
WriteLiteral(" <ul");
|
||||
|
||||
WriteLiteral(" id=\"UserDetailTab-Authorization_Membership_Roles\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
|
||||
#line 53 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 53 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
foreach (var roleToken in Model.AuthorizationToken.RoleTokens.Cast<RoleToken>())
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <li>");
|
||||
|
||||
|
||||
#line 55 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
if (roleToken.Role.Id < 0)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 57 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
Write(roleToken.Role.Name);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <span");
|
||||
|
||||
WriteLiteral(" class=\"code\"");
|
||||
|
||||
WriteLiteral(">[SYSTEM ROLE]</span>");
|
||||
|
||||
WriteLiteral("\r\n");
|
||||
|
||||
|
||||
#line 58 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isDiscoAdmin)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 63 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
Write(Html.ActionLink(roleToken.Role.Name, MVC.Config.AuthorizationRole.Index(roleToken.Role.Id)));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 63 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 67 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
Write(roleToken.Role.Name);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 67 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </li>\r\n");
|
||||
|
||||
|
||||
#line 71 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </ul>\r\n");
|
||||
|
||||
|
||||
#line 73 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" id=\"UserDetailTab-Authorization_Membership_Groups_Container\"");
|
||||
|
||||
WriteLiteral(">\r\n <h4>Associated Active Directory Security Groups</h4>\r\n " +
|
||||
" <ul");
|
||||
|
||||
WriteLiteral(" id=\"UserDetailTab-Authorization_Membership_Groups\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
|
||||
#line 77 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 77 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
foreach (var group in Model.AuthorizationToken.GroupMembership)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <li>");
|
||||
|
||||
|
||||
#line 79 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
Write(group);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("</li>\r\n");
|
||||
|
||||
|
||||
#line 80 "..\..\Views\User\UserParts\_Authorization.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </ul>\r\n <span");
|
||||
|
||||
WriteLiteral(" class=\"smallMessage\"");
|
||||
|
||||
WriteLiteral(">[Note: Includes inherited groups]</span>\r\n </div>\r\n </div>\r\n\r\n" +
|
||||
"\r\n </div>\r\n <script>\r\n $(\'#UserDetailTabItems\').append(\'<li><a href" +
|
||||
"=\"#UserDetailTab-Authorization\">Authorization</a></li>\');\r\n </script>\r\n</div>" +
|
||||
"\r\n");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user