@namespace Oqtane.Modules.Controls @inherits ModuleBase @inject IUserService UserService @if (_authorized) { if (Disabled) { } else { @((MarkupString)_iconSpan) @_text } } @code { [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 string _text = ""; string _url = ""; string _parameters = ""; string _classname = "btn btn-primary"; string _style = ""; bool _editmode = true; bool _authorized = false; string _iconSpan = ""; 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 = $" "; } _url = EditUrl(Action, _parameters); _authorized = IsAuthorized(); } private bool IsAuthorized() { bool authorized = false; if (PageState.EditMode || !_editmode) { SecurityAccessLevel security = SecurityAccessLevel.Host; if (Security == null) { string typename = ModuleState.ModuleType.Replace(Utilities.GetTypeNameLastSegment(ModuleState.ModuleType, 0) + ",", Action + ","); Type 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; } }