File: UI\WebControls\RoleGroup.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="RoleGroup.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Web.UI.WebControls {
 
    using System.ComponentModel;
    using System.Security.Principal;
    using System.Web.Security;
 
 
    /// <devdoc>
    /// Associates a collection of roles with a template.
    /// </devdoc>
    public sealed class RoleGroup {
        private ITemplate _contentTemplate;
        private string[] _roles;
 
 
        /// <devdoc>
        /// The template associated with the roles.
        /// </devdoc>
        [
        Browsable(false),
        DefaultValue(null),
        PersistenceMode(PersistenceMode.InnerProperty),
        TemplateContainer(typeof(LoginView)),
        ]
        public ITemplate ContentTemplate {
            get {
                return _contentTemplate;
            }
            set {
                _contentTemplate = value;
            }
        }
 
 
        /// <devdoc>
        /// The roles associated with the template.
        /// </devdoc>
        [
        TypeConverterAttribute(typeof(StringArrayConverter)),
        ]
        public string[] Roles {
            get {
                if (_roles == null) {
                    return new string[0];
                }
                else {
                    // Must clone to preserve encapsulation
                    return (string[]) _roles.Clone();
                }
            }
            set {
                if (value == null) {
                    _roles = value;
                }
                else {
                    // Must clone to preserve encapsulation
                    _roles = (string[]) value.Clone();
                }
            }
        }
 
 
        /// <devdoc>
        /// Whether the user is in any of the roles.
        /// </devdoc>
        public bool ContainsUser(IPrincipal user) {
            if (user == null) {
                throw new ArgumentNullException("user");
            }
            if (_roles == null) {
                return false;
            }
            foreach (string role in _roles) {
                if (user.IsInRole(role)) {
                    return true;
                }
            }
            return false;
        }
 
 
        /// <devdoc>
        /// For appearance in designer collection editor.
        /// </devdoc>
        public override string ToString() {
            StringArrayConverter converter = new StringArrayConverter();
            return converter.ConvertToString(Roles);
        }
    }
}