2013-08-07 43 views
5

Tôi hiện đang sử dụng MVC 4 với Dao cạo và C# làm mã đằng sau logic. Một phiên bản tùy chỉnh của cơ sở dữ liệu SimpleMembership đã được xây dựng để đáp ứng các yêu cầu của trang web.Chỉ định vai trò gán vai trò cho người dùng trong MVC 4 qua hộp kiểm

Trang web có thể tạo và chỉnh sửa vai trò và người dùng như dự định, tuy nhiên tôi đang gặp sự cố khi chỉ định vai trò cho người dùng. Một số kết quả tìm kiếm cung cấp mã để gán vai trò cụ thể cho người dùng khi tạo tài khoản. Yêu cầu của chúng tôi là không có điều này, thay vào đó chúng tôi cần phải gán chúng theo cách thủ công bằng cách sử dụng giao diện người dùng qua trang web.

Có rất nhiều hướng dẫn cho ASP.Net (ví dụ dưới đây), tuy nhiên tôi đang gặp khó khăn để xác định vị trí một hướng dẫn có liên quan cho MVC 4.

http://www.asp.net/web-forms/tutorials/security/roles/assigning-roles-to-users-cs

Sau khi đọc ở trên, tôi đang hỏi các câu hỏi sau đây.

Câu hỏi Một: Có hướng dẫn MVC để gán vai trò người dùng qua giao diện người dùng không? Nếu có, bạn có thể cung cấp liên kết đến hướng dẫn hay không.

Câu hỏi thứ hai: Nếu bạn không có một liên kết đến một hướng dẫn, bạn có thể cung cấp một số lời khuyên về những điều sau đây:

  • Khi một quản trị viên tải tài Quản lý giao diện người dùng một bảng sẽ được tải lên một danh sách người dùng, khi họ nhấp vào nút chỉnh sửa cho một người dùng cụ thể, những điều sau đây sẽ có hiệu lực và chuyển dữ liệu trở lại chế độ xem có tên 'Edit.cshtml'.

    public ActionResult Edit(int id = 0) 
    { 
        var userProfile = _db.UserProfiles.Find(id); 
        if (userProfile == null) 
        { 
        Response.Redirect("~/UserManagement/PageNotFound"); 
        } 
    
        return View(userProfile); 
    } 
    
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(UserProfile userProfile) 
    { 
        if (ModelState.IsValid) 
        { 
        _db.Entry(userProfile).State = EntityState.Modified; 
        _db.SaveChanges(); 
        return RedirectToAction("Index"); 
        } 
    
        return View(userProfile); 
    } 
    

Trong 'Chỉnh sửa' xem tôi đã nghĩ đến việc render một cái nhìn cục bộ lên trang với hộp kiểm cho vai trò khác nhau trong cơ sở dữ liệu. Một cái gì đó tương tự như sau:

@model IEnumerable<PROJECTNAME.DAL.Models.Role> 

@foreach (var item in Model) 
{ 
    @Html.LabelFor(m => item.RoleName) 

    <label class="bolder"> 
     Visible 
     @Html.CheckBoxFor(m => item.Visible) 
     <span class="lbl"></span> 
    </label> 
} 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
    <!-- CODE HERE IS TO EDIT USER DETAILS --> 

    <div id="assignableroles"> 
     @{ 
     Html.RenderPartial("_AssignableRoles"); 
     } 
    </div> 
    </fieldset>  
} 

Khi các hộp kiểm thích hợp được đánh dấu sẽ cập nhật vào cơ sở dữ liệu đó (miễn là các thuộc tính ủy quyền đã được thêm tương ứng).

Tôi đã tìm thấy điều này trực tuyến, tuy nhiên tôi không chắc chắn nơi để thêm điều này trong một điều khiển hoặc cho dù nó có liên quan đến tình trạng khó khăn của tôi như tôi đang xem xét sử dụng hai quan điểm như tôi cần phải xử lý hai mô hình khác nhau.

var role = (SimpleRoleProvider)Roles.Provider; 

    if (!role.RoleExists(selectedRole)) 
    role.CreateRole(selectedRole); 

    WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
    role.AddUsersToRoles(new[] { model.UserName }, new[] { selectedRole }); 

Xin lỗi vì bài đăng dài, tuy nhiên đây là lần đầu tiên tôi sử dụng Tư cách thành viên trong MVC và tôi vẫn còn khá mới đối với công cụ này.

Edit:

Tôi cũng đã đảm bảo này đã được bổ sung lên web.cấu hình file:

<roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="SimpleRoleProvider" 
     type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" 
     connectionStringName="DefaultConnection" applicationName="PROJECTNAME" /> 
    </providers> 
</roleManager> 
+0

Tôi đã sử dụng một giải pháp, tuy nhiên nó hoàn toàn khác với những gì bạn đang cố gắng. Nếu bạn khăng khăng với cách tiếp cận của bạn, hãy cho tôi biết điểm kết thúc không có vấn đề của bạn và những vấn đề gì vẫn còn là – AminSaghi

Trả lời

7

đơn giản nhất Cách thứ nhất là để thao tác với các phương pháp sau đây:

Roles.AddUserToRole(UserName, RoleName) - thêm vai trò

Roles.RemoveUserFromRole(UserName, RoleName) - loại bỏ vai trò

Ví dụ, để thêm vai trò cho người dùng mà bạn có thể có kết quả hành động sau đây trong bộ điều khiển của bạn:

[HttpPost] 
public ActionResult(string UserName, string RoleName) 
{ 
Roles.AddUserToRole(UserName, RoleName) 
return View() 
} 

Tên người dùng chuỗi, chuỗi Vai trò - phải được chuyển từ Chế độ xem theo phương thức bài đăng.

+0

Cảm ơn bạn đã được tư vấn. Tôi hiện đang khắc phục sự cố khác với các hộp kiểm được hiển thị để tôi sẽ quay lại điều này sau để xác nhận xem giải pháp có hoạt động hay không. – Damian

Các vấn đề liên quan