private ProfileGroup GetGroup(string module, string name, string groupDesc = "") { foreach (ProfileGroup g in (IList<ProfileGroup>)ViewData[module]) { if (g.Name == name) { return g; } } ProfileGroup group = new ProfileGroup(); group.Name = name; group.Description = string.IsNullOrWhiteSpace(groupDesc) ? group.Name : groupDesc; ((IList<ProfileGroup>)ViewData[module]).Add(group); return group; }
private void InitResPermission() { ViewBag.Modules = new List<string>(); ViewBag.ModuleDesc = new Dictionary<string, string>(); ProfileSchemaConfig profileConfig = (ProfileSchemaConfig)ConfigurationManager.GetSection(XCRM.Access.Profile.PROFILE_SCHEMA_CONFIG_SECTION); foreach (ModuleConfig module in profileConfig.Modules) { ViewBag.Modules.Add(module.Name); ViewBag.ModuleDesc.Add(module.Name, string.IsNullOrWhiteSpace(module.Description) ? module.Name : module.Description); ViewData[module.Name] = new List<ProfileGroup>(); if (string.IsNullOrWhiteSpace(module.Groups)) { ProfileGroup pg = new ProfileGroup(); pg.Name = ProfileGroup.DEFAULT_NAME; pg.Description = string.IsNullOrWhiteSpace(module.Description) ? module.Name : module.Description; foreach (PermissionConfig permission in module.Permissions) { AddPermisson(pg, module, permission); } ((List<ProfileGroup>)ViewData[module.Name]).Add(pg); } else { string[] group = module.Groups.Split(new string[] { ModuleConfig.GROUP_SPLITE }, StringSplitOptions.RemoveEmptyEntries); string[] groupDesc = module.GroupsDesc.Split(new string[] { ModuleConfig.GROUP_SPLITE }, StringSplitOptions.RemoveEmptyEntries); foreach (PermissionConfig permission in module.Permissions) { int index = FindGroupDesc(permission.Group, group); ProfileGroup pg = GetGroup(module.Name, permission.Group, index == -1 ? "" : groupDesc[index]); AddPermisson(pg, module, permission); } } } }
private string AddPermisson(ProfileGroup pg, ModuleConfig module, PermissionConfig permission) { Permission p = new Permission(); p.Path = "/" + module.Name + permission.Path; p.Type = permission.Type; p.Name = permission.Name; string[] actions = permission.Action.Split(new string[] { ModuleConfig.GROUP_SPLITE }, StringSplitOptions.RemoveEmptyEntries); string[] actionDesc = permission.ActionDesc.Split(new string[] { ModuleConfig.GROUP_SPLITE }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < actions.Length; i++) { Action action = new Action(actionDesc[i], int.Parse(actions[i])); if (!p.ActionList.Contains(action)) { p.ActionList.Add(action); } } pg.Permissions.Add(p); return p.Path; }