Пример #1
0
        protected virtual void ApplySecurityRules(SecurityResourceConfigurationInfo src, SecuredResourceContainerInfo resourceContainer, ISecurityConfiguration securityConfiguration)
        {
            foreach (SecuredResourceInfo resource in resourceContainer.SecuredResources)
            {
                List <Object> securedResources = securityConfiguration.GetSecuredResource(resource.Scope, resource.Name);
                if (securedResources == null)
                {
                    return;
                }
                if (securedResources.Count > 0)
                {
                    var minLevel           = resource.ConfigurationOptions.Select(option => option.Level).Min();
                    var restrictiveOptions = from option in resource.ConfigurationOptions
                                             where option.Level == minLevel
                                             select option;

                    List <ConfigurationOptionInfo> applicableOptions = new List <ConfigurationOptionInfo>(restrictiveOptions);

                    string[] allRoleNames = (from roles in src.SecurityRoles select roles.Name).ToArray();
                    //    new string[src.SecurityRoles.Count];
                    //foreach (SecurityRoleInfo role in src.SecurityRoles)
                    //{
                    //    allRoleNames[allRoleNames.Length-1] = role.Name;
                    //}
                    List <string> userRoleNames = UserBLL.HasRoles(
                        UserBLL.GetCurrentUser(),
                        allRoleNames);
                    var anyRoles = from role in src.SecurityRoles where (from userRole in userRoleNames where role.Name == userRole select userRole).Any() select role;
                    foreach (SecurityRoleInfo role in
                             (from role in src.SecurityRoles where (from userRole in userRoleNames where role.Name == userRole select userRole).Any() select role))
                    {
                        var grantedOptions = role.GrantedResourceContainers.Where(grc => grc.Name == resourceContainer.Name)
                                             .SelectMany(grc => grc.GrantedResources.Where(gr => (gr.Scope == resource.Scope) && (gr.Name == resource.Name)))
                                             .Select(gr => gr.Option)
                                             .SelectMany(grantedOption => resource.ConfigurationOptions.Where(option => option.OptionId == grantedOption)
                                                         .Select(option => option));
                        foreach (ConfigurationOptionInfo option in grantedOptions)
                        {
                            if (applicableOptions.RemoveAll(ao => (ao.Property == option.Property) && (ao.Level < option.Level)) > 0)
                            {
                                applicableOptions.Add(option);
                            }
                        }
                    }
                    foreach (ConfigurationOptionInfo applicableOption in applicableOptions)
                    {
                        foreach (object securedResource in securedResources)
                        {
                            PropertyInfo optionProperty = securedResource.GetType().GetProperty(applicableOption.Property);
                            optionProperty.SetValue(securedResource, Convert.ChangeType(applicableOption.Value, optionProperty.PropertyType), null);
                        }
                    }
                }
            }
        }