@namespace Oqtane.Modules.Controls
@inherits ModuleBase
@inject IRoleService RoleService
@inject IUserService UserService
@if (_permissions != null)
{
Role |
@foreach (PermissionString permission in _permissions)
{
@permission.PermissionName @EntityName |
}
@foreach (Role role in _roles)
{
@role.Name |
@foreach (PermissionString permission in _permissions)
{
var p = permission;
|
}
}
@if (_users.Count != 0)
{
User |
@foreach (PermissionString permission in _permissions)
{
@permission.PermissionName @EntityName |
}
@foreach (User user in _users)
{
string userid = "[" + user.UserId.ToString() + "]";
@user.DisplayName |
@foreach (PermissionString permission in _permissions)
{
var p = permission;
|
}
}
}
}
@code {
[Parameter]
public string EntityName { get; set; }
[Parameter]
public string PermissionNames { get; set; }
[Parameter]
public string Permissions { get; set; }
string _permissionnames = "";
List _roles;
List _permissions;
List _users = new List();
string _username = "";
string _message = "";
protected override async Task OnInitializedAsync()
{
if (string.IsNullOrEmpty(PermissionNames))
{
_permissionnames = "View,Edit";
}
else
{
_permissionnames = PermissionNames;
}
_roles = await RoleService.GetRolesAsync(ModuleState.SiteId);
_roles.Insert(0, new Role { Name = Constants.AllUsersRole });
if (!string.IsNullOrEmpty(Permissions))
{
_permissions = new List();
foreach (string permissionname in _permissionnames.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
_permissions.Add(new PermissionString { PermissionName = permissionname, Permissions = "" });
}
foreach (PermissionString permissionstring in UserSecurity.GetPermissionStrings(Permissions))
{
if (_permissions.Find(item => item.PermissionName == permissionstring.PermissionName) != null)
{
_permissions[_permissions.FindIndex(item => item.PermissionName == permissionstring.PermissionName)].Permissions = permissionstring.Permissions;
}
if (permissionstring.Permissions.Contains("["))
{
foreach (string user in permissionstring.Permissions.Split(new char[] { '[' }, StringSplitOptions.RemoveEmptyEntries))
{
if (user.Contains("]"))
{
int userid = int.Parse(user.Substring(0, user.IndexOf("]")));
if (_users.Where(item => item.UserId == userid).FirstOrDefault() == null)
{
_users.Add(await UserService.GetUserAsync(userid, ModuleState.SiteId));
}
}
}
}
}
}
}
private bool? GetPermissionValue(string permissions, string securityKey)
{
if ((";" + permissions + ";").Contains(";" + "!" + securityKey + ";"))
{
return false; // deny permission
}
else
{
if ((";" + permissions + ";").Contains(";" + securityKey + ";"))
{
return true; // grant permission
}
else
{
return null; // not specified
}
}
}
private bool GetPermissionDisabled(string roleName)
{
if (roleName == Constants.AdminRole)
{
return true;
}
else
{
return false;
}
}
private async Task AddUser()
{
if (_users.Where(item => item.Username == _username).FirstOrDefault() == null)
{
try
{
User user = await UserService.GetUserAsync(_username, ModuleState.SiteId);
if (user != null)
{
_users.Add(user);
}
}
catch
{
_message = "Username Does Not Exist";
}
}
_username = "";
}
private void PermissionChanged(bool? value, string permissionName, string securityId)
{
bool? selected = value;
PermissionString permission = _permissions.Find(item => item.PermissionName == permissionName);
if (permission != null)
{
List ids = permission.Permissions.Split(';').ToList();
ids.Remove(securityId); // remove grant permission
ids.Remove("!" + securityId); // remove deny permission
switch (selected)
{
case true:
ids.Add(securityId); // add grant permission
break;
case false:
ids.Add("!" + securityId); // add deny permission
break;
case null:
break; // permission not specified
}
_permissions[_permissions.FindIndex(item => item.PermissionName == permissionName)].Permissions = string.Join(";", ids.ToArray());
}
}
public string GetPermissions()
{
ValidatePermissions();
return UserSecurity.SetPermissionStrings(_permissions);
}
private void ValidatePermissions()
{
PermissionString permission;
for (int i = 0; i < _permissions.Count; i++)
{
permission = _permissions[i];
List ids = permission.Permissions.Split(';').ToList();
ids.Remove("!" + Constants.AllUsersRole); // remove deny all users
ids.Remove("!" + Constants.RegisteredRole); // remove deny registered users
permission.Permissions = string.Join(";", ids.ToArray());
_permissions[i] = permission;
}
}
}