public UserAccessRulesVM(UserVM user, AccessType access):base(access) { UnitOfWork = new SoheilEdmContext(); CurrentUser = user; UserDataService = new UserDataService(UnitOfWork); UserDataService.AccessRuleChanged += OnAccessRuleChanged; AccessRuleDataService = new AccessRuleDataService(UnitOfWork); UserAccessRuleDataService = new UserAccessRuleDataService(UnitOfWork); PositionAccessRuleDataService = new PositionAccessRuleDataService(UnitOfWork); RootNode = new UserAccessNodeVM(Access) { Title = string.Empty, Id = -1, ParentId = -2 }; var selectedVms = new ObservableCollection<UserAccessNodeVM>(); var ruleAccessList = AccessRuleDataService.GetPositionsAccessOfUser(user.Id); foreach (var accessRule in AccessRuleDataService.GetActives()) { selectedVms.Add(new UserAccessNodeVM(accessRule.Id, user.Id, AccessRuleDataService, UserAccessRuleDataService, ruleAccessList, Access)); } var allVms = new ObservableCollection<AccessRuleVM>(); foreach (var accessRule in AccessRuleDataService.GetActives()) { allVms.Add(new AccessRuleVM(AccessRuleDataService, accessRule, Access)); } AllItems = new ListCollectionView(allVms); IncludeCommand = new Command(Include, CanInclude); ExcludeTreeCommand = new Command(ExcludeTree, CanExcludeTree); foreach (UserAccessNodeVM item in selectedVms) { if (item.ParentId == RootNode.Id) { RootNode.ChildNodes.Add(item); break; } } CurrentNode = RootNode; }
public UserAccessNodeVM(int accessRuleId, int userId, AccessRuleDataService accessRuleDataService, UserAccessRuleDataService userAccessRuleDataService, List<Tuple<int, AccessType>> ruleAccessList, AccessType access) : base(access) { var accessRule = accessRuleDataService.GetSingle(accessRuleId); Title = Common.Properties.Resources.ResourceManager.GetString(accessRule.Name); Id = accessRule.Id; ParentId = accessRule.Parent != null ? accessRule.Parent.Id : -1; foreach (var child in accessRule.Children) { ChildNodes.Add(new UserAccessNodeVM(child.Id, userId, accessRuleDataService, userAccessRuleDataService, ruleAccessList, Access)); } var userAccessRule = userAccessRuleDataService.GetSingle(userId, accessRuleId); if (userAccessRule != null) { if (userAccessRule.Type != null) UserAccess = (AccessType)userAccessRule.Type; } if(!ruleAccessList.Any()) return; foreach (Tuple<int, AccessType> tuple in ruleAccessList.Where(item => item.Item1 == accessRuleId)) { PositionAccess |= tuple.Item2; } }