protected void Setup_Tabs() { //OK, HOW THIS WORKS. //We loop trough all roles. per function of the system the user has access to we add a number that is a bitwise new number ( 0,1,2,4,8,16,32,64,128,...) //after we've looped trough the roles, we do a bitwise or so we can easily tell if the user has access to a part of the system User user = null; if (LoggedInUser.IsUserLoggedIn) { user = LoggedInUser.GetUser(); } var roles = RoleManager.GetUserPermissions(user); //handle the tasks tab if (!roles.Any(x => x == RolesPermissions.Tasks)) { TasksTab.Visible = false; Tasks.Visible = false; } else { //link the departments drop down var list = SystemLists.General.Departments; var DepartmentsList = new ObservableCollection <Department>(); DepartmentsList.Add(new Department(0) { Description = LanguageFiles.GetLocalTranslation("AllDepartments", "All") }); foreach (var item in SystemLists.General.Departments) { DepartmentsList.Add(item); } DropDownSorting.DataSource = DepartmentsList; DropDownSorting.DataBind(); if (LoggedInUser.IsUserLoggedIn && (!roles.Any(x => x == RolesPermissions.Technician))) { DropDownSorting.SelectedIndex = DepartmentsList.ToList().FindIndex(x => x.ID == LoggedInUser.GetUser().Department.ID); } else { DropDownSorting.SelectedIndex = 0; } //set the parameters for the datasource string departmentID = Request.QueryString["depID"]; var searchText = Request.QueryString["Search"]; var departmentField = TaskSource.SelectParameters["DepartmentID"]; var searchField = TaskSource.SelectParameters["SearchText"]; if (LoggedInUser.IsUserLoggedIn) { if ( !RoleManager.UserHasPermission(LoggedInUser.GetUser(), RolesPermissions.ManageTasks) && ( (String.IsNullOrWhiteSpace(departmentID) && String.IsNullOrWhiteSpace(searchText)) || (LoggedInUser.GetUser().Department.ID.ToString() == departmentID) )) { // logged in + either nothing was given or the user's department was chosen -> show department + user's tasks departmentField.DefaultValue = LoggedInUser.GetUser().Department.ID.ToString(); searchText = LoggedInUser.GetUser().UserName; } else if (!String.IsNullOrWhiteSpace(departmentID)) { //department was set. departmentField.DefaultValue = departmentID; } if (!String.IsNullOrWhiteSpace(searchText)) { //search text was given. searchField.DefaultValue = searchText; } } else { if (!String.IsNullOrWhiteSpace(departmentID)) { departmentField.DefaultValue = departmentID; } if (!String.IsNullOrWhiteSpace(searchText)) { searchField.DefaultValue = searchText; } } //set the department parameter TaskSource.SelectParameters["DepartmentID"] = departmentField; TaskSource.SelectParameters["SearchText"] = searchField; //set datasource and bind/retrieve data (databind also executes all inline code to bind to them) TaskSource.DataBind(); TaskGrid.DataSourceID = nameof(TaskSource); TaskGrid.DataBind(); } //handle machines tab //if (!roles.Any(x => x == RolesPermissions.ManageMachines)) { //no permissions! MachinesTab.Visible = false; //Machines.Visible = false; } /*else * { * MachinesTab.Visible = true; * //Machines.Visible = true; * }*/ //permissions to the Suppliers tab! /*if (!roles.Any(x => x == RolesPermissions.ManageSuppliers) && * !roles.Any(x => x == RolesPermissions.ViewSuppliers))*/ { SuppliersTab.Visible = false; //Suppliers.Visible = false; } /*else * { * SuppliersTab.Visible = true; * Suppliers.Visible = true; * }*/ //permissions for the Users tab! if (!roles.Any(x => x == RolesPermissions.ManageUsers)) { UsersTab.Visible = false; Users.Visible = false; } else { UsersTab.Visible = true; Users.Visible = true; var RolesList = new ObservableCollection <RoleModel>(); var roleList = LanguageFiles.LoadLanguageFile("Roles"); for (int i = 0; i < roleList.Length; i++) { RolesList.Add(RoleModel.CreateModel((Role)i, roleList[i])); } //bind User dropdown of roles selectUserType.DataSource = RolesList; selectUserType.DataBind(); //set the parameters for the datasource string role = Request.QueryString["UserRole"]; var searchText = Request.QueryString["SearchUser"]; if (!String.IsNullOrWhiteSpace(role) && role != nameof(Role.AllRoles)) { var RoleField = UserSource.SelectParameters["role"]; RoleField.DefaultValue = role; UserSource.SelectParameters["role"] = RoleField; } if (!String.IsNullOrWhiteSpace(searchText)) { var searchField = UserSource.SelectParameters["contains"]; searchField.DefaultValue = searchText; UserSource.SelectParameters["contains"] = searchField; } UserSource.DataBind(); UserGrid.DataSourceID = nameof(UserSource); UserGrid.DataBind(); } //set the last known open tab if (!String.IsNullOrWhiteSpace(ActiveTab)) { hidTABControl.Value = ActiveTab; } }