140 lines
4.5 KiB
Plaintext
140 lines
4.5 KiB
Plaintext
@namespace Oqtane.Modules.Controls
|
|
@inherits ModuleBase
|
|
@inject IUserService UserService
|
|
|
|
@if (_authorized)
|
|
{
|
|
if (Disabled)
|
|
{
|
|
<button class="@_classname" style="@_style" disabled>@((MarkupString)_iconSpan) @_text</button>
|
|
}
|
|
else
|
|
{
|
|
<NavLink class="@_classname" href="@_url" style="@_style">@((MarkupString)_iconSpan) @_text</NavLink>
|
|
}
|
|
}
|
|
|
|
@code {
|
|
private string _text = string.Empty;
|
|
private string _url = string.Empty;
|
|
private string _parameters = string.Empty;
|
|
private string _classname = "btn btn-primary";
|
|
private string _style = string.Empty;
|
|
private bool _editmode = true;
|
|
private bool _authorized = false;
|
|
private string _iconSpan = string.Empty;
|
|
|
|
[Parameter]
|
|
public string Action { get; set; } // required
|
|
|
|
[Parameter]
|
|
public SecurityAccessLevel? Security { get; set; } // optional - can be used to explicitly specify SecurityAccessLevel
|
|
|
|
[Parameter]
|
|
public string Text { get; set; } // optional - defaults to Action if not specified
|
|
|
|
[Parameter]
|
|
public string Parameters { get; set; } // optional - querystring parameter should be in the form of "id=x&name=y"
|
|
|
|
[Parameter]
|
|
public string Class { get; set; } // optional - defaults to primary if not specified
|
|
|
|
[Parameter]
|
|
public string Style { get; set; } // optional
|
|
|
|
[Parameter]
|
|
public bool Disabled { get; set; } // optional
|
|
|
|
[Parameter]
|
|
public string EditMode { get; set; } // optional - specifies if a user must be in edit mode to see the action - default is true
|
|
|
|
[Parameter]
|
|
public string IconName { get; set; } // optional - specifies an icon for the link - default is no icon
|
|
|
|
protected override void OnParametersSet()
|
|
{
|
|
_text = Action;
|
|
if (!string.IsNullOrEmpty(Text))
|
|
{
|
|
_text = Text;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(Parameters))
|
|
{
|
|
_parameters = Parameters;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(Class))
|
|
{
|
|
_classname = Class;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(Style))
|
|
{
|
|
_style = Style;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(EditMode))
|
|
{
|
|
_editmode = bool.Parse(EditMode);
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(IconName))
|
|
{
|
|
_iconSpan = $"<span class=\"oi oi-{IconName}\"></span> ";
|
|
}
|
|
|
|
_url = EditUrl(Action, _parameters);
|
|
_authorized = IsAuthorized();
|
|
}
|
|
|
|
private bool IsAuthorized()
|
|
{
|
|
var authorized = false;
|
|
if (PageState.EditMode || !_editmode)
|
|
{
|
|
var security = SecurityAccessLevel.Host;
|
|
if (Security == null)
|
|
{
|
|
var typename = ModuleState.ModuleType.Replace(Utilities.GetTypeNameLastSegment(ModuleState.ModuleType, 0) + ",", Action + ",");
|
|
var moduleType = Type.GetType(typename);
|
|
if (moduleType != null)
|
|
{
|
|
var moduleobject = Activator.CreateInstance(moduleType);
|
|
security = (SecurityAccessLevel)moduleType.GetProperty("SecurityAccessLevel").GetValue(moduleobject, null);
|
|
}
|
|
else
|
|
{
|
|
security = SecurityAccessLevel.Anonymous; // occurs when an action does not have a corresponding module control
|
|
Class = "btn btn-warning"; // alert developer of missing module comtrol
|
|
}
|
|
}
|
|
else
|
|
{
|
|
security = Security.Value;
|
|
}
|
|
|
|
switch (security)
|
|
{
|
|
case SecurityAccessLevel.Anonymous:
|
|
authorized = true;
|
|
break;
|
|
case SecurityAccessLevel.View:
|
|
authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, ModuleState.Permissions);
|
|
break;
|
|
case SecurityAccessLevel.Edit:
|
|
authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, ModuleState.Permissions);
|
|
break;
|
|
case SecurityAccessLevel.Admin:
|
|
authorized = UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole);
|
|
break;
|
|
case SecurityAccessLevel.Host:
|
|
authorized = UserSecurity.IsAuthorized(PageState.User, Constants.HostRole);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return authorized;
|
|
}
|
|
}
|