Итак, я настраиваю свое разрешение для веб-сайта MVC.И я делаю разрешение на основе ролей, для выполнения действий в контроллере потребуются разные роли в зависимости от цели действия.Я знаю, что наиболее рекомендуемым будет атрибут authorizeattribute (так как я хочу, чтобы роли кэшировались), но возможно ли иметь то же самое с actionfilterattribute?
В настоящее время у меня есть атрибут actionfilterattete, подобный этому:
public class PermissionRequired : ActionFilterAttribute{
private readonly Role reqrole;
public PermissionRequired(Role reqRole)
{
reqrole = reqRole;
}
public override void OnActionExecuting(ActionExecutingContext filterContext) {
var ctrl = (GeneralController)filterContext.Controller;
if (!ctrl.CurrentUser.InRole(reqrole)) {
//some code to redirect this to a certain page
}
base.OnActionExecuting(filterContext);
}
}
и на GeneralController для получения текущего пользователя
public class GeneralController : Controller
private User currentUser;
public User CurrentUser {
get {
if (currentUser != null)
return currentUser;
int currentUserId = Convert.ToInt32(httpContext.User.identity.Name);
if (currentUserId != 0) {
this.currentUser = Tds.Users.FirstOrDefault(u => u.Id == currentUserId)
}
return currentUser;
}
}
и на контроллерах, которые унаследуют этот атрибут
[PermissionRequired(Role.Moderator)]
public class SomeControllerThatNeedsPermission
{
[PermissionRequired(Role.SuperAdmin)]
public ActionResult SomeActionThatNeedsPermission()
{
}
}
, поэтому любая помощь приветствуется .. даже комментарии илимысли приветствуются: D
Большое спасибо!