I want to show Components in a tabs , so first of all create few components. In this project we have three components, First View Component public class AllViewComponent : ViewComponent { private readonly UserManager<ApplicationUser> _userManager; public AllViewComponent(UserManager<ApplicationUser> userManager) { _userManager = userManager; } public async Task<IViewComponentResult> InvokeAsync() { List<StudentViewModel> allUsers = new List<StudentViewModel>(); var items = await _userManager.Users.ToListAsync(); foreach (var item in items) { allUsers.Add(new StudentViewModel {Id=item.Id, EnrollmentNo = item.EnrollmentNo, FatherName = item.FatherName, Name = item.Name, Age = item.Age, Birthdate = item.Birthdate, Address = item.Address, Gender = item.Gender, Email = item.Email }); }
As I have discussed in earlier article that programmer need to implement custom provides to enable its own database works with in-built functionality. My previous article was to implement custom membership provider and in this article I will continue with custom role provider in MVC.
By following these simple steps we will complete the task:
Now run the application and open Index page, it will redirect you on login view. Login with username = admin and password = password and debug this application, it will check the above method GetRolesForUser(). If there is a role for this user then it will go to index view otherwise return to login page.
In my case I have used only one username and return admin only from the method. But you can check the roles in your database and return them in string array. If there is a role “admin” in your array then only it will open index page.
By following these simple steps we will complete the task:
- Create a class "Custom_RoleMembership" in Models folder in your MVC application.
- Inherit this from RoleProvider class exists in "System.Web.Security" namespace.
- Right click on RoleProvider and select on “Implement Abstract Class”, it will all the override function need to be implement by us.
- Just implement GetRolesForUser(string username) method and replace that function with the following code:
public override string[] GetRolesForUser(string username)
{
//Get roles for this username and return in string array
if(username=="admin")
return new string[] { "Admin" };
return null;
}
- Go to HomeController and place an attribute like below:
[Authorize(Roles = "Admin")]
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
} - Open web.config file and place below code under system.web tag
<roleManager defaultProvider="Custom_RoleMembership" enabled="true">
<providers>
<clear />
<add name="Custom_RoleMembership"
type="CustomMembershipP.Models.Custom_RoleMembership" />
</providers>
</roleManager>
Now run the application and open Index page, it will redirect you on login view. Login with username = admin and password = password and debug this application, it will check the above method GetRolesForUser(). If there is a role for this user then it will go to index view otherwise return to login page.
In my case I have used only one username and return admin only from the method. But you can check the roles in your database and return them in string array. If there is a role “admin” in your array then only it will open index page.
Comments
Post a Comment