2016-08-10 4 views
1

Я создаю приложения ASP.NET MVC, приложения снова проведут проверку ролей пользователей &, чтобы решить, какой из них отображать.Пользовательская авторизация роли по сеансу

Я пробовал WebViewPage для создания пользовательского htmlhelper.

<p>@Check.isInRole("Admin")</p> 

Затем с помощью собственной строки для хранения роли пользователя

private string _Roles { get; set; } 

но тогда _Roles глобальные и доля всех пользователей.

Есть ли способ, которым я могу запросить DB только один раз, когда пользователь впервые подключится к webapp, а затем загрузит все роли пользователя в переменную Session?

Или

Другой метод обхода также очень много значит для меня. Пожалуйста помоги.

***** Я знал, что мы можем использовать членство в ASP NET, не хотим использовать по какой-либо причине.

ответ

0

У меня есть Сделал это, если у вас есть лучший ответ, пожалуйста, дайте мне знать.

с обычаем HTML Helper, не может показать вид/действие ссылки базы на роли пользователя

@if(tech.isInRole("Admin,Developer")) 
{ 
    //It will show the link only if the user have the above roles 
    @Html.ActionLink(......); 
} 

ниже код для пользовательского HTML Helper

public abstract class tech : WebViewPage 
{ 
    public static bool isInRole(string roles) { 
     string ID = HttpContext.Current.User.Identity.Name; 

     //This if to skip query Db, if user are in the same session 
     if (HttpContext.Current.Session["roles"] == null) 
     { 
      var db = new UserDbContext(); 
      HttpContext.Current.Session["roles"] = db.UserRoles 
        .Where(a => a.User.Username == ID) 
        .Select(a => a.Role.Rolename).ToArray(); 
     } 

     string[] arrRole = (string[])(HttpContext.Current.Session["roles"]); 

     char[] delimiters = new char[] { ',' }; 
     string[] inRoles = roles.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 

     return arrRole.Intersect(inRoles, StringComparer.OrdinalIgnoreCase).Any(); 
    } 
} 
1

Вы можете проводить сеансы. Потому что он будет использоваться во всем приложении до тех пор, пока сеанс не будет отключен.
первый контроллер, на входе в систему, сохранить роль пользователя в переменной сеанса

Session["UserRole"] = user role 

2 в виде вы можете получить значение

@Session["UserRole"].toString() 

надеюсь, что это помогает

+0

добавить, где я должен поставить этот код Session ["UserRole"] = роль пользователя, поэтому она назначается только один раз за сеанс? –

+0

он должен в функции, которая обрабатывает аутентификацию пользователя пользователя в первый раз. если и назначить другое значение для той же переменной, то предыдущее значение будет переопределено – anand

Смежные вопросы