首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight和RIA服务:管理用户

Silverlight和RIA服务:管理用户
EN

Stack Overflow用户
提问于 2012-10-31 20:10:50
回答 1查看 509关注 0票数 0

我想在客户端管理用户和角色,但我找不到实现此目的的方法。链接或代码将非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-01 03:15:48

很抱歉这个废弃的问题,我已经解决了这个问题很多天了,我填写了我应该在这里张贴的答案,因为我在网上找不到一个完整的答案,这可以帮助一些在那里苦苦挣扎的灵魂。除了一个我现在记不住的链接,我向博客所有者道歉,因为我甚至不记得他的名字,然而,这是完整的历史:

首先,创建一个类来包装MembershipUser,另一个类来包装MembsershipRole:

代码语言:javascript
复制
    public class MembershipServiceUser
            {
                public string Comment { get; set; }
                [Editable(false)]
                public DateTime CreationDate { get; set; }
                [Key]
                [Editable(false, AllowInitialValue = true)]
                public string Email { get; set; }
                public bool IsApproved { get; set; }
                [Editable(false)]
                public bool IsLockedOut { get; set; }
                [Editable(false)]
                public bool IsOnline { get; set; }
                public DateTime LastActivityDate { get; set; }
                [Editable(false)]
                public DateTime LastLockoutDate { get; set; }
                public DateTime LastLoginDate { get; set; }
                [Editable(false)]
                public DateTime LastPasswordChangedDate { get; set; }
                [Editable(false)]
                public string PasswordQuestion { get; set; }
                [Key]
                [Editable(false, AllowInitialValue = true)]
                public string UserName { get; set; }

                public MembershipServiceUser() { }
                public MembershipServiceUser(MembershipUser user)
                {
                    this.FromMembershipUser(user);
                }

                public void FromMembershipUser(MembershipUser user)
                {
                    this.Comment = user.Comment;
                    this.CreationDate = user.CreationDate;
                    this.Email = user.Email;
                    this.IsApproved = user.IsApproved;
                    this.IsLockedOut = user.IsLockedOut;
                    this.IsOnline = user.IsOnline;
                    this.LastActivityDate = user.LastActivityDate;
                    this.LastLockoutDate = user.LastLockoutDate;
                    this.LastLoginDate = user.LastLoginDate;
                    this.LastPasswordChangedDate = user.LastPasswordChangedDate;
                    this.PasswordQuestion = user.PasswordQuestion;
                    this.UserName = user.UserName;
                }

                public MembershipUser ToMembershipUser()
                {
                    MembershipUser user = Membership.GetUser(this.UserName);

                    if (user.Comment != this.Comment) user.Comment = this.Comment;
                    if (user.IsApproved != this.IsApproved) user.IsApproved = this.IsApproved;
                    if (user.LastActivityDate != this.LastActivityDate) user.LastActivityDate = this.LastActivityDate;
                    if (user.LastLoginDate != this.LastLoginDate) user.LastLoginDate = this.LastLoginDate;

                    return user;
                }
    }

//Roles
    public class MembershipServiceRole {

            public MembershipServiceRole() { }

            public MembershipServiceRole(string rolename) {
                RoleName = rolename;
            }

            [Key]
            [Editable(true, AllowInitialValue = true)]
            public string RoleName { get; set; }
    }

其次,创建一个从DomainService派生的类来操作用户和角色包装器:

代码语言:javascript
复制
[EnableClientAccess(RequiresSecureEndpoint = false /* This should be set to true before the application is deployed */)]
    public class MembershipService : DomainService
    {
        protected override void OnError(DomainServiceErrorInfo errorInfo)
        {
            TimeoutHelper.HandleAuthenticationTimeout(errorInfo, this.ServiceContext.User);
        }

        [RequiresRole("Administrator")]
        public IEnumerable<MembershipServiceUser> GetUsers()
        {
            return Membership.GetAllUsers().Cast<MembershipUser>().Select(u => new MembershipServiceUser(u));
        }

        [RequiresRole("Administrator")]
        public IEnumerable<MembershipServiceUser> GetUsersByEmail(string email)
        {
            return Membership.FindUsersByEmail(email).Cast<MembershipUser>().Select(u => new MembershipServiceUser(u));
        }

        [RequiresRole("Administrator")]
        public MembershipServiceUser GetUsersByName(string userName)
        {
            MembershipServiceUser retVal = null;            
            retVal =  Membership.FindUsersByName(userName)
                .Cast<MembershipUser>()
                .Select(u => new MembershipServiceUser(u))
                .FirstOrDefault();
            return retVal;            
        }

        [Invoke(HasSideEffects = true)]
        public void CreateUser(MembershipServiceUser user, string password)
        {
            if (string.IsNullOrEmpty(user.Email)) {
                user.Email = "cambiar@dominio.com";
            }
            Membership.CreateUser(user.UserName, password, user.Email);
        }

        [RequiresRole("Administrator")]
        public void DeleteUser(MembershipServiceUser user)
        {
            Membership.DeleteUser(user.UserName);
        }

        [RequiresRole("Administrator")]
        public void UpdateUser(MembershipServiceUser user)
        {
            Membership.UpdateUser(user.ToMembershipUser());
        }

        [RequiresRole("Administrator")]
        [Update(UsingCustomMethod = true)]
        public void ChangePassword(MembershipServiceUser user, string newPassword)
        {
            MembershipUser u = user.ToMembershipUser();
            u.ChangePassword(u.ResetPassword(), newPassword);
        }

        [RequiresRole("Administrator")]
        public void ResetPassword(MembershipServiceUser user)
        {
            user.ToMembershipUser().ResetPassword();
        }

        [RequiresRole("Administrator")]
        public void UnlockUser(MembershipServiceUser user)
        {
            user.ToMembershipUser().UnlockUser();
        }

        #region Roles

        [RequiresRole("Administrator")]
        public IEnumerable<MembershipServiceRole> GetRoles() {
            return Roles.GetAllRoles().Cast<string>().Select(r => new MembershipServiceRole(r));
        }

        [RequiresRole("Administrator")]
        public IEnumerable<MembershipServiceRole> GetRolesForUser(string userName) {
            return Roles.GetRolesForUser(userName).Cast<string>().Select(r => new MembershipServiceRole(r));
        }

        [RequiresRole("Administrator")]
        public void CreateRole(MembershipServiceRole role) {
            Roles.CreateRole(role.RoleName);
        }

        [RequiresRole("Administrator")]
        public void DeleteRole(MembershipServiceRole role) {
            Roles.DeleteRole(role.RoleName);            
        }

        [RequiresRole("Administrator")][Invoke]
        public void AddUserToRole(string userName, string roleName) {
            if (!Roles.IsUserInRole(userName,roleName))
                Roles.AddUserToRole(userName, roleName);
        }

        [RequiresRole("Administrator")]
        [Invoke]
        public void RemoveUserFromRole(string userName, string roleName) {
            if (Roles.IsUserInRole(userName, roleName))
                Roles.RemoveUserFromRole(userName, roleName);
        }

        #endregion //Roles
    }

第三:像使用域名类一样使用服务!干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13157663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档