public override string[] FindUsersInRole(string roleName, string account)
        {
            //throw new NotImplementedException();
            List<string> users = new List<string>();

            using (DailyStatementContext _db = new DailyStatementContext())
            {
                try
                {
                    var usersInRole = from emp in _db.Employees.Include("Rank")
                                      where emp.Rank.Name == roleName && emp.Account == account
                                      select emp;

                    if (usersInRole != null)
                    {
                        foreach (var userInRole in usersInRole)
                        {
                            users.Add(userInRole.Account);
                        }
                    }
                }
                catch
                {
                }
            }

            return users.ToArray();
        }
        /// <summary>
        /// 取得所有角色
        /// </summary>
        /// <returns></returns>
        public override string[] GetAllRoles()
        {
            //throw new NotImplementedException();
            List<string> roles = new List<string>();

            using (DailyStatementContext _db = new DailyStatementContext())
            {
                try
                {
                    var dbRoles = from rank in _db.Ranks
                                  select rank;

                    foreach (var role in dbRoles)
                    {
                        roles.Add(role.Name);
                    }
                }
                catch
                {
                }
            }

            return roles.ToArray();
        }
        /// <summary>
        /// 檢查帳號是否屬於指定的角色
        /// </summary>
        /// <param name="account">帳號</param>
        /// <param name="roleName">角色名稱</param>
        /// <returns></returns>
        public override bool IsUserInRole(string account, string roleName)
        {
            //throw new NotImplementedException();
            bool isValid = false;

            using (DailyStatementContext _db = new DailyStatementContext())
            {
                try
                {
                    var usersInRole = from emp in _db.Employees.Include("Rank")
                                      where emp.Account == account && emp.Rank.Name == roleName
                                      select emp;

                    if (usersInRole != null)
                    {
                        isValid = true;
                    }
                }
                catch
                {
                    isValid = false;
                }
            }

            return isValid;
        }
        /// <summary>
        /// 檢查角色是否存在
        /// </summary>
        /// <param name="roleName">角色名稱</param>
        /// <returns></returns>
        public override bool RoleExists(string roleName)
        {
            //throw new NotImplementedException();
            bool isValid = false;

            using (DailyStatementContext _db = new DailyStatementContext())
            {
                // check if role exits
                if (_db.Ranks.Any(r => r.Name == roleName))
                {
                    isValid = true;
                }
            }

            return isValid;
        }
        /// <summary>
        /// 取得指定帳號擁有的所有角色
        /// </summary>
        /// <param name="account">帳號</param>
        /// <returns></returns>
        public override string[] GetRolesForUser(string account)
        {
            ////throw new NotImplementedException();
            List<string> roles = new List<string>();

            using (DailyStatementContext _db = new DailyStatementContext())
            {
                try
                {
                    var dbRoles = from emp in _db.Employees.Include("Rank")
                                  where emp.Account == account
                                  select emp;

                    foreach (var role in dbRoles)
                    {
                        roles.Add(role.Rank.Name);
                    }

                }
                catch
                {
                }
            }

            return roles.ToArray();
        }