Helpex - Trao đổi & giúp đỡ Đăng nhập
40

Tôi đang xây dựng hệ thống thành viên của riêng mình và tôi không muốn làm gì với nhà cung cấp Dịch vụ thành viên MS. Tôi đã tìm kiếm khắp nơi trên internet và đây trên StackOverflow nhưng tất cả những gì tôi có thể tìm thấy là các nhà cung cấp dịch vụ thành viên được xây dựng trên nền tảng của nhà cung cấp Tư cách thành viên MS.

Dù sao thì bây giờ tôi đã kết nối gần hết mọi thứ, nhưng tôi muốn sử dụng thuộc tính Ủy quyền tùy chỉnh đã sử dụng cơ sở hạ tầng thành viên của tôi. Tôi đã xem chủ đề này ở đây trên trang web và tôi đang cố gắng làm điều gì đó tương tự, nhưng tôi không chắc đó là điều tôi cần. Cho đến nay đây là những lớp tôi đã có:

SessionManager:

public static class SessionManager : ISessionManager
{
    public static void RegisterSession(string key, object obj)
    {
        System.Web.HttpContext.Current.Session[key] = obj;
    }

    public static void FreeSession(string key)
    {
        System.Web.HttpContext.Current.Session[key] = null;
    }


    public static bool CheckSession(string key)
    {
        if (System.Web.HttpContext.Current.Session[key] != null)
            return true;
        else
            return false;
    }


    public static object ReturnSessionObject(string key)
    {
        if (CheckSession(key))
            return System.Web.HttpContext.Current.Session[key];
        else
            return null;
    }
}

SharweAuthorizeAttribute: ( Tôi không thực sự chắc chắn liệu đó có thực sự là điều tôi nên làm hay không )

public class SharweAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (SessionManager.CheckSession(SessionKeys.User) == true)
            return true;
        else 
            return false;
    }
}

Bây giờ đây là những gì tôi cần:

  1. Lớp SharweAuthorizeAttribute của tôi có chính xác ngay từ đầu không?
  2. Tôi cần có thể chuyển hướng người dùng chưa được xác thực đến trang đăng nhập
  3. Tôi cần cấp quyền cho người dùng dựa trên vai trò của họ (sử dụng nhà cung cấp vai trò của riêng tôi), vì vậy tôi sẽ làm điều gì đó như:

    [SharweAuthorize(Roles="MyRole")]
    

Đó là nó tôi đoán ... Mọi đề xuất đều được hoan nghênh :)

CẬP NHẬT: Được rồi, tôi vừa đọc lại trang đó và tìm ra giải pháp cho câu hỏi số hai:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    if (SessionManager.CheckSession(SessionKeys.User) == false)
    {
        filterContext.Result = new RedirectToRouteResult(
                        new RouteValueDictionary 
                        {
                            { "action", "ActionName" },
                            { "controller", "ControllerName" }
                        });
    }
    else
        base.HandleUnauthorizedRequest(filterContext);
}

Vui lòng cho tôi biết nếu tôi hiểu đúng ...

40 hữu ích 1 bình luận 25k xem chia sẻ
21

Vâng, bạn đã hiểu đúng (IMO sẽ an toàn hơn và đơn giản hơn khi triển khai nhà cung cấp dịch vụ thành viên tùy chỉnh, nhưng đó là lựa chọn của bạn)

  1. Vâng no chinh xac
  2. Bạn làm đúng
  3. Bạn kế thừa thuộc rolestính từ AuthorizeAttributelớp cơ sở và bạn kiểm tra việc triển khai của mình nếu người dùng có vai trò đó.

Chỉnh sửa: thêm một chút về các vai trò

nếu bạn có

[SharweAuthorize(Roles="MyRole")]

thì bạn có thể kiểm tra thuộc tính Vai trò trong phương thức AuthorizeCore

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    if (SessionManager.CheckSession(SessionKeys.User) == true) {
        if (SessionManager.CheckUserIsInRole( Roles )) // where Roles == "MyRole"
           return true;
    }
    return false;
}
21 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ asp.net mvc asp.net-mvc-3 asp.net-membership , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading