Пример #1
0
        public GridResults LoadPaging(long userId, string search, int pageIndex, out long totalRecords, string sortColumnName = "", string sortOrderBy = "")
        {
            //Get current user
            var user = BlUser.LoadSingle(userId);

            //Query paged data
            var results = LoadPaging(userId, CreateFilter(search), user.PageSize, pageIndex - 1, out totalRecords);

            //Convert results into display model
            var i   = 0;
            var res = (from r in results
                       select new
            {
                Id = i++,
                Module = r.Id,
                Path = r.Path ?? "",
                r.Description,
                EntryDate = r.EntryDate.ToString(true),
                Logging = r.EnableLogging ? "eye" : "eye-slash colorRed",
                Status = r.Status == "A" ? "check colorGreen" : "close colorRed"
            }).ToList();


            //Convert display model into json data
            return(GridVm.FormatResult(res, user.PageSize, pageIndex, totalRecords));
        }
Пример #2
0
        public static bool CanDo(long userId, string moduleId, string code)
        {
            //Load user for roles
            var user = BlUser.LoadSingle(userId);

            if (user == null)
            {
                throw new BusinessException("UserNotFound");
            }

            var roles = BlRole.LoadParents(userId, user.Roles.ToList());

            //Exit if full permission case of roles system administrator
            if (roles.Select(r => r.Id).Contains(Constants.FullAdminRole))
            {
                return(true);
            }

            //Load permissions for user roles
            var blPermission = new BlPermission();
            var permissions  = blPermission.LoadByModuleAndRole(user.Id, moduleId, roles.ToList(), true).ToList();

            //Return permission existance
            return(permissions.Where(p => p.Code == code).Any());
        }
Пример #3
0
        public static User LoadByPin(long userId, long pin)
        {
            var blUser    = new BlUser();
            var predicate = PredicateBuilder.False <User>();

            predicate = predicate.Or(m => m.Entity.Pin == pin);
            var toRet = blUser.LoadSearch(userId, predicate).FirstOrDefault();

            return(toRet);
        }
Пример #4
0
        private static IEnumerable <TreeItemVm> ConstructTreeNode(long userId, IEnumerable <Role> roles, bool allowView, bool allowAdd, bool allowEdit, bool allowDelete)
        {
            var user  = BlUser.LoadSingle(userId);
            var toRet = new List <TreeItemVm>();

            foreach (var role in roles)
            {
                TreeItemVm treeNode;
                var        actions = "</span>";
                actions += "<span id='actions_" + role.Id + "' style='display:none'>&nbsp;";
                if (allowView)
                {
                    actions += "<a class='treeAction' onclick='javascript:ViewAction(" + role.Id + ");'><span>" + BlDescription.GetDescription(Enumerations.DescriptionResources.Language, "lblView", user.LanguageId) + "</span></a>&nbsp;";
                }
                if (allowAdd)
                {
                    actions += "<a class='treeAction' onclick='javascript:AddAction(" + role.Id + ");'><span>" + BlDescription.GetDescription(Enumerations.DescriptionResources.Language, "lblAdd", user.LanguageId) + "</span></a>&nbsp;";
                }
                if (allowEdit)
                {
                    actions += "<a class='treeAction' onclick='javascript:EditAction(" + role.Id + ");'><span>" + BlDescription.GetDescription(Enumerations.DescriptionResources.Language, "lblEdit", user.LanguageId) + "</span></a>&nbsp;";
                }
                if (allowDelete)
                {
                    actions += "<a class='treeAction' onclick='javascript:DeleteAction(" + role.Id + ");'><span>" + BlDescription.GetDescription(Enumerations.DescriptionResources.Language, "lblDelete", user.LanguageId) + "</span></a>&nbsp;";
                }
                actions += "<span>";

                if (role.Id == 0)
                {
                    treeNode = new TreeItemVm
                    {
                        id      = "0",
                        parent  = "#",
                        text    = "<span onclick='ShowDetails(0);'>Root" + actions + "</span>",
                        icon    = "fa fa-briefcase fa-lg colorMain",
                        state   = "{\"opened\": \"true\"}",
                        li_attr = "{\"class\" : \"form-control-label\"}"
                    };
                }
                else
                {
                    treeNode = new TreeItemVm
                    {
                        id      = role.Id.ToUiString(),
                        parent  = role.ParentRole == null ? "0" : role.ParentRole.Id.ToUiString(),
                        text    = "<span onclick='ShowDetails(" + role.Id + ");'>" + role.Code + actions + "</span>",
                        icon    = "fa fa-users fa-lg colorMain",
                        li_attr = "{\"class\" : \"form-control-label\"}"
                    };
                }
                toRet.Add(treeNode);
            }
            return(toRet);
        }
Пример #5
0
        public static List <DdlVm.DdlOption> LoadQs(long userId, string parameters, string searchTerm, int pageSize, int pageNum, out long count)
        {
            var user     = LoadSingle(userId);
            var blObject = new BlUser();

            var serializer = new JavaScriptSerializer();
            var dict       = serializer.Deserialize <Dictionary <string, object> >(parameters);
            var isActive   = CheckEmpty.Boolean(ref dict, "isActive");
            var branchId   = CheckEmpty.Numeric(ref dict, "branchId");

            var predicate = PredicateBuilder.True <User>();

            if (isActive)
            {
                predicate = predicate.And(c => c.Entity.Status == "A");
            }

            if (branchId != 0)
            {
                predicate = predicate.And(c => c.BranchId == branchId);
            }

            if (CheckEmpty.String(searchTerm) != "")
            {
                var tokens = searchTerm.Tokens();
                foreach (var token in tokens)
                {
                    var predicate2 = PredicateBuilder.False <User>();
                    predicate2 = predicate2.Or(m => m.Entity.FirstName.Contains(token));
                    predicate2 = predicate2.Or(m => m.Entity.FatherName.Contains(token));
                    predicate2 = predicate2.Or(m => m.Entity.FamilyName.Contains(token));
                    predicate2 = predicate2.Or(m => m.Entity.ArFirstName.Contains(token));
                    predicate2 = predicate2.Or(m => m.Entity.ArFatherName.Contains(token));
                    predicate2 = predicate2.Or(m => m.Entity.ArFamilyName.Contains(token));
                    predicate2 = predicate2.Or(m => m.UserName.Contains(token));
                    predicate  = predicate.And(predicate2);
                }
            }

            var items = blObject.LoadPaging(userId, predicate, pageSize, (pageNum - 1), out count);

            return(items.Select(i => FormatForQs(user.LanguageId, i)).ToList());
        }
Пример #6
0
        public GridResults LoadPaging(long userId, string search, int pageIndex, out long totalRecords, string sortColumnName = "", string sortOrderBy = "")
        {
            //Get current user
            var user = BlUser.LoadSingle(userId);

            //Query paged data
            var results = LoadPaging(userId, CreateFilter(search), Int16.MaxValue, pageIndex - 1, out totalRecords);

            //Convert results into display model
            var res = (from r in results
                       select new
            {
                r.Id,
                r.Code,
                EntryDate = r.EntryDate.ToString(true),
                Status = r.Status == "A" ? "check colorGreen" : "close colorRed"
            }).ToList();


            //Convert display model into json data
            return(GridVm.FormatResult(res, Int16.MaxValue, pageIndex, totalRecords));
        }
Пример #7
0
        private string GetRoleUsers(long userId, long roleId)
        {
            //Get all role users and set is active for assigned ones
            var blUser = new BlUser();
            var users  = blUser.LoadAll(userId).ToList();

            users.ForEach(u => u.IsRestricted = !u.Roles.Where(r => r.Id == roleId).Any());


            var toRet = new JavaScriptSerializer().Serialize((from u in users
                                                              select new TreeItemVm
            {
                id = u.Id.ToUiString(),
                parent = "#",
                text = u.UserName,
                icon = "fa fa-user " + (u.IsRestricted ? "colorRed" : "colorGreen"),
                state = "{\"checked\": \"" + (u.IsRestricted ? "false" : "true") + "\"}",
                li_attr = "{\"class\" : \"form-control-label\"}"
            }));

            return(toRet);
        }
Пример #8
0
        public string LoadRoleUsersTree(long userId, long roleId)
        {
            //Get all users
            var blUser = new BlUser();
            var users  = blUser.LoadAll(userId);

            users.ToList().ForEach(u => u.IsRestricted = !u.Roles.Select(r => r.Id).Contains(roleId));

            //Create return object
            var toRet = new List <TreeItemVm>();

            //Create root node
            var rootNode = new User {
                Id = 0, UserName = LoadSingle(userId, roleId).Code
            };

            //Add root node
            toRet.AddRange(ConstructUserTreeNode(userId, rootNode.SingleItemAsEnumerable()));

            //Add menus
            toRet.AddRange(ConstructUserTreeNode(userId, users.ToList()));

            return(new JavaScriptSerializer().Serialize(toRet));
        }
Пример #9
0
        public bool Delete(long userId, long toDeleteId)
        {
            using (var tran = new TransactionScope())
            {
                //Check if parent
                if (HaveChildren(userId, toDeleteId))
                {
                    throw new BusinessException("CannotDeleteRelatedChildren");
                }

                //Check if related users
                var blUser = new BlUser();
                if (blUser.LoadByRole(userId, toDeleteId).Any())
                {
                    throw new BusinessException("CannotDeleteRelatedUsers");
                }

                var toDelete = LoadSingle(userId, toDeleteId);
                var toRet    = Delete(userId, toDelete);

                tran.Complete();
                return(toRet);
            }
        }
Пример #10
0
        public IEnumerable <Permission> LoadByModuleAndRole(long userId, string moduleId, List <Role> roles, bool onlyActive = false)
        {
            var predicate = PredicateBuilder.True <Permission>();

            predicate = predicate.And(e => e.Module.Id == moduleId);
            if (onlyActive)
            {
                predicate = predicate.And(e => e.Module.Status == "A");
            }
            var permissions = _repository.LoadSearch(predicate).ToList();

            //Create modules and access permission if it does not exist
            if (!permissions.Any())
            {
                var user = BlUser.LoadSingle(userId);
                //Create module if does not exist
                if (BlModule.LoadSingle(userId, moduleId) == null)
                {
                    var newModule = new Module
                    {
                        Id          = moduleId,
                        Description = "N/A",
                        Author      = user.Id,
                        UserId      = user.Id,
                        Status      = "A"
                    };
                    var blModule = new BlModule();
                    blModule.Create(userId, newModule);
                }
                //Create access permission
                var newPermission = new Permission
                {
                    Module = BlModule.LoadSingle(userId, moduleId),
                    Code   = "Access",
                    Roles  = BlRole.LoadSingle(userId, Constants.FullAdminRole).SingleItemAsEnumerable().ToList(),
                    Status = "A"
                };
                Create(userId, newPermission);
            }

            var tmpPermissions = new Permission[permissions.Count];

            permissions.CopyTo(tmpPermissions);

            //Remove permission outside the roles
            foreach (var permission in tmpPermissions)
            {
                var keepFlag = false;
                foreach (var role in roles)
                {
                    if (permission.Roles.Select(r => r.Id).Contains(role.Id))
                    {
                        keepFlag = true;
                        break;
                    }
                }
                if (!keepFlag)
                {
                    permissions.Remove(permission);
                }
            }

            return(permissions);
        }
Пример #11
0
        public string LoadUserMenu(long userId, bool forEdit)
        {
            var user = BlUser.LoadSingle(userId);

            //Load all active menu items per company
            var predicate = PredicateBuilder.True <Menu>();

            predicate = predicate.And(p => p.Status);

            //Query all entries without a branch or specific for a branch
            var predicate2 = PredicateBuilder.False <Menu>();

            predicate2 = predicate2.Or(p => p.BranchId == user.BranchId);
            predicate2 = predicate2.Or(p => p.BranchId == null);
            predicate  = predicate.And(predicate2);

            var lMenu = LoadSearch(userId, predicate).ToList();

            //Vaidate if all modules exist in permissions
            var lDeniedMenu = new List <Menu>();

            foreach (var menuItem in lMenu.ToList())
            {
                if (menuItem.Module != null)
                {
                    if (!BlPermission.CanDo(userId, menuItem.Module.Id, "Access"))
                    {
                        //Build the denied menu list
                        lDeniedMenu.Add(menuItem);
                    }
                }
            }

            //Remove unauthorized and broken menu items
            lMenu = (from m in lMenu
                     where !(from dm in lDeniedMenu select dm.Id).Contains(m.Id)
                     select m).ToList();

            //Iterate all sub menu items and clear broken entries
            foreach (var menuItem in lMenu.ToList())
            {
                //Remove each node that does not have a module nor children
                if (menuItem.Module == null)
                {
                    if (menuItem.Parent != null && menuItem.DescriptionCode != null)
                    {
                        if (!lMenu.Where(m => m.Id == menuItem.Parent.Id && m.Module != null && m.DescriptionCode != null).Any())
                        {
                            //Check if any children have this item as parent
                            if (!lMenu.Where(m => m.Parent != null).Where(m => m.Parent.Id == menuItem.Id && m.Module != null && m.DescriptionCode != null).Any())
                            {
                                lDeniedMenu.Add(menuItem);
                            }
                        }
                    }
                }
            }

            //Remove unauthorized and broken menu entries
            lMenu = (from m in lMenu
                     where !(from dm in lDeniedMenu select dm.Id).Contains(m.Id)
                     select m).ToList();


            //Iterate all top menu items and clear broken entries
            foreach (var menuItem in lMenu.Where(m => m.Parent == null).ToList())
            {
                if (menuItem.Module == null)
                {
                    //Remove each node that does not have a module nor children
                    if (!lMenu.Where(m => m.Parent != null).Where(m => m.Parent.Id == menuItem.Id && m.DescriptionCode != null).Any())
                    {
                        lDeniedMenu.Add(menuItem);
                    }
                }
            }

            //Remove unauthorized and broken menu items
            lMenu = (from m in lMenu
                     where !(from dm in lDeniedMenu select dm.Id).Contains(m.Id)
                     select m).ToList();

            var menu = BuildMenuChildren(user, lMenu, null, forEdit);

            return(menu);
        }
Пример #12
0
        public Role Edit(long userId, Role toEdit, string roleUsers = "", string rolePermissions = "")
        {
            using (var tran = new TransactionScope())
            {
                var oldImage = LoadSingle(userId, toEdit.Id, true);
                oldImage.ParentRole = toEdit.ParentRole;
                oldImage.Code       = toEdit.Code;
                var toRet = _repository.Edit(oldImage);

                //Adjust role users
                var arRoleUsers = roleUsers.Split(',');
                var blUser      = new BlUser();
                var allUsers    = blUser.LoadAll(userId);
                foreach (var user in allUsers)
                {
                    if (user.Roles.Where(r => r.Id == toRet.Id).Any() && !arRoleUsers.Contains(user.Id.ToUiString()))
                    {
                        user.Roles.Remove(user.Roles.Where(ur => ur.Id == toRet.Id).First());
                        blUser.Edit(userId, user);
                    }

                    if (!user.Roles.Where(r => r.Id == toRet.Id).Any() && arRoleUsers.Contains(user.Id.ToUiString()))
                    {
                        user.Roles.Add(LoadSingle(userId, toRet.Id));
                        blUser.Edit(userId, user);
                    }
                }

                //Adjust role permissions
                var arRolePermissions = rolePermissions.Split(',');
                var blPermission      = new BlPermission();
                var allPermissions    = blPermission.LoadAll(userId);
                foreach (var permission in allPermissions)
                {
                    if (permission.Roles.Where(r => r.Id == toRet.Id).Any() && !arRolePermissions.Contains(permission.Id.ToUiString()))
                    {
                        permission.Roles.Remove(permission.Roles.Where(rp => rp.Id == toRet.Id).First());
                        blPermission.Edit(userId, permission);
                    }

                    if (!permission.Roles.Where(r => r.Id == toRet.Id).Any() && arRolePermissions.Contains(permission.Id.ToUiString()))
                    {
                        permission.Roles.Add(LoadSingle(userId, toRet.Id));
                        blPermission.Edit(userId, permission);
                    }
                }

                //if (toRet.Users == null)
                //{toRet.Users = new List<User>();}
                //toRet.Users = toRet.Users.ToList();

                //foreach (var permissionUser in toRet.Users)
                //{
                //    var user = BlUser.LoadSingle(Convert.ToInt64(permissionUser.Id));
                //    if (!toRet.Users.Where(u => roleUsers.Split(',').Contains(u.Id.ToUiString())).Any())
                //    {
                //        user.Roles.Remove(user.Roles.Where(ur => ur.Id == toRet.Id).First());
                //        blUser.Edit(userId, user);
                //    }
                //}
                //foreach (var roleUserId in arRoleUser)
                //{
                //    var user = BlUser.LoadSingle(Convert.ToInt64(roleUserId));
                //    if (!toRet.Users.Where(u => u.Id == userId).Any())
                //    {
                //        user.Roles.Remove(user.Roles.Where(r => r.Id == toRet.Id).First());
                //        blUser.Edit(userId, user);
                //    }
                //    else
                //    {
                //        user.Roles.Add(LoadSingle(userId, toRet.Id));
                //        blUser.Edit(userId, user);
                //    }
                //}
                //}

                BlLog.Log(userId, Module, "Edit role", "RoleModified", new object[] { toEdit.Code });
                tran.Complete();
                return(toRet);
            }
        }
Пример #13
0
        public string GetSecurityString(long userId, string path)
        {
            //CLean path url
            path = path.ToUpper().Replace("../STOCK/APP/", "");
            path = path.ToUpper().Replace("/STOCK/APP/", "");

            var toRetList = new ArrayList();

            //Load the module by path
            var predicate = PredicateBuilder.True <Module>();

            predicate = predicate.And(p => p.Path == path);
            var module = LoadSearch(userId, predicate).FirstOrDefault();

            //Create module if does not exist
            if (module == null)
            {
                using (var tran = new TransactionScope())
                {
                    var systemUser = BlUser.LoadSingle(Constants.SystemUser);
                    var newModule  = new Module
                    {
                        Id          = path.Split('/')[path.Split('/').Length - 1].ToUpper().Replace(".HTML", ""),
                        Path        = path,
                        Description = "N/A",
                        Author      = Constants.SystemUser,
                        Status      = "A"
                    };
                    newModule = Create(userId, newModule);

                    //Create first access permission and assign to system admin
                    var newPermission = new Permission
                    {
                        Module = newModule,
                        Code   = "Access",
                        Status = "A",
                        Roles  =
                            BlRole.LoadSingle(userId, Constants.FullAdminRole).
                            SingleItemAsEnumerable().ToList()
                    };
                    var blPermission = new BlPermission();
                    blPermission.Create(userId, newPermission);
                    tran.Complete();
                }
            }

            //Get module permissions if exists
            if (module != null)
            {
                var blPermission = new BlPermission();
                var permissions  = blPermission.LoadByModule(userId, module.Id, true);

                //Check each permission status
                foreach (var permission in permissions)
                {
                    if (BlPermission.CanDo(userId, module.Id, permission.Code))
                    {
                        toRetList.Add(permission.Code);
                    }
                }
            }

            return(string.Join(":", toRetList.ToArray()));
        }