Click here to Skip to main content
15,886,026 members
Articles / Security

Manage security and redirection for non authorized access in MVC

Rate me:
Please Sign up or sign in to vote.
4.50/5 (7 votes)
18 Jul 2012CPOL2 min read 56.4K   1.4K   26  
How to apply security and redirection to a view when a user cannot access a controller or a controller action in MVC
(function(a){var b=a.telerik;var e=/\s+/;b.scripts.push("telerik.list.js");b.list={htmlBuilder:function(i,h,k){var n,m,j=i.id,l=i.name,g=new b.stringBuilder(),f=a(i);if(k){m=f.find("option:selected").text();n=f.val()}else{m=i.value}function o(){return a(['<div class="t-widget',h,'t-header"></div>'].join(" "))}this.render=function(){f.wrap(o()).hide();var p=a('<div class="t-dropdown-wrap t-state-default"></div>').insertBefore(f);this.text({builder:g,text:m,id:j,name:l}).appendTo(p);a('<span class="t-select"><span class="t-icon t-arrow-down">select</span></span>').appendTo(p);if(k){g.buffer=[];a(g.cat('<input style="display:none;" type="text" ').catIf('value="',n,'" ',n).catIf('name="',l,'" ',l).cat("/>").string()).insertAfter(p)}};this.text=function(p){return a(['<span class="t-input">',p.text||"&nbsp;","</span>"].join(""))}},initialize:function(){this.previousValue=this.value();b.bind(this,{dataBinding:this.onDataBinding,dataBound:this.onDataBound,error:this.onError,open:this.onOpen,close:this.onClose,valueChange:this.onChange,load:this.onLoad})},common:function(){this.open=function(){if(!this.loader.isAjax()&&(!this.data||this.data.length==0)){return}var f=this.$wrapper||this.$element,g=this.dropDown,h=g.$element.css("z-index");var i={offset:f.offset(),outerHeight:f.outerHeight(),outerWidth:f.outerWidth(),zIndex:h&&h!="auto"?h:b.getElementZIndex(f[0])};if(g.$items){g.open(i)}else{this.fill(function(){g.open(i)})}};this.close=function(){this.dropDown.close()};this.dataBind=function(f,o){this.data=f=(f||[]);var k=-1,m=f.length,n=this.placeholder;if(n&&f[0]&&f[0].Text!==n){var g=[{Text:n,Value:""}];for(var j=0;j<m;j++){g.push(f[j])}this.data=f=g}for(var h=0;h<m;h++){var l=f[h];if(l){if(l.Selected){k=h}}}this.dropDown.dataBind(f,this.encoded);if(k!=-1){this.index=k;this.select(k)}if(!o){this.text("");this.$element.val("");if(this.filteredDataIndexes){this.filteredDataIndexes=null}}};this.highlight=function(f){var k=function(i){var l=i.dropDown;i.close();if(!l.$items){l.dataBind(i.data,i.encoded)}l.$items.removeClass("t-state-selected").eq(h).addClass("t-state-selected")};var h=-1;if(!this.data){return h}if(!isNaN(f-0)){if(f>-1&&f<this.data.length){h=f;k(this)}}else{if(a.isFunction(f)){for(var g=0,j=this.data.length;g<j;g++){if(f(this.data[g])){h=g;break}}if(h!=-1){k(this)}}else{h=this.dropDown.highlight(f)}}return h}},filtering:function(){this.filter=function(g){g.isFiltered=true;var o=true,h=g.data,l=g.$text[0],r=l.value,s=g.trigger,i=g.dropDown;r=this.multiple(r);if(r.length<g.minChars){return}var k=g.filter;if(g.loader.isAjax()){if(g.cache&&h&&h.length>0){g.filters[k](g,h,r);var j=g.filteredDataIndexes;if((j&&j.length>0)||(k==0&&g.selectedIndex!=-1)){o=false}}if(o){var p={};p[g.queryString.text]=r;g.loader.ajaxRequest(function(u){var w=g.trigger;var v=g.dropDown;if(u&&u.length==0){v.close();v.dataBind();return}g.data=u;b.trigger(g.element,"dataBound");g.filters[k](g,u,r);var t=v.$items;if(t.length>0){if(!v.isOpened()){w.open()}g.filtering.autoFill(g,t.first().text())}else{w.close()}},{data:p})}}else{o=false;g.filters[k](g,g.data,r)}if(!o){var f=i.$items;if(!f){return}var m=f.length,q=g.selectedIndex;var n=k==0?q!=-1?f[q].innerText||f[q].textContent:"":f.length>0?f.first().text():"";this.autoFill(g,n);if(m==0){s.close()}else{if(!i.isOpened()){s.open()}}}};this.multiple=function(f){return f}},filters:function(){this.filters=[function f(h,j,m){if(!j||j.length==0){return}var k=h.dropDown;var g=k.$items;if(!g||g.length==0||h.loader.isAjax()){k.dataBind(j,h.encoded);g=k.$items}for(var l=0,o=j.length;l<o;l++){if(j[l].Text.slice(0,m.length).toLowerCase()==m.toLowerCase()){var n=g[l];h.selectedIndex=l;k.highlight(n);k.scrollTo(n);return}}g.removeClass("t-state-selected");h.selectedIndex=-1;b.list.highlightFirstOnFilter(h,g)},c(false,function(g,h){return h.slice(0,g.length).toLowerCase()==g.toLowerCase()}),c(true,function(g,h){return h&&h.toLowerCase().indexOf(g.toLowerCase())!=-1})]},loader:function(g){this.ajaxError=false;this.component=g;this.isAjax=function(){return g.ajax||g.ws||g.onDataBinding};function f(h,i){var j={url:(g.ajax||g.ws)["selectUrl"],type:"POST",data:{},dataType:"text",error:function(l,k){g.loader.ajaxError=true;if(b.ajaxError(g.element,"error",l,k)){return}},complete:a.proxy(function(){this.hideBusy()},g.loader),success:function(k,m,n){try{k=eval("("+k+")")}catch(l){if(!b.ajaxError(g.element,"error",n,"parseeror")){alert("Error! The requested URL did not return JSON.")}g.loader.ajaxError=true;return}k=k.d||k;if(h){h.call(g,k)}}};a.extend(j,i);if(g.ws){j.data=b.toJson(j.data);j.contentType="application/json; charset=utf-8"}return j}this.ajaxRequest=function(h,j){var i={};if(b.trigger(g.element,"dataBinding",i)){return}if(g.ajax||g.ws){this.showBusy();a.ajax(f(h,{data:a.extend({},j?j.data:{},i.data)}))}else{if(h){h.call(g,g.data)}}},this.showBusy=function(){this.busyTimeout=setTimeout(a.proxy(function(){this.component.$wrapper.find("> .t-dropdown-wrap .t-icon").addClass("t-loading")},this),100)},this.hideBusy=function(){clearTimeout(this.busyTimeout);this.component.$wrapper.find("> .t-dropdown-wrap .t-icon").removeClass("t-loading")}},trigger:function(f){this.component=f;this.change=function(){var g=f.previousValue;var h=f.value();if(g==undefined||h!=g){b.trigger(f.element,"valueChange",{value:h})}f.previousValue=h};this.open=function(){var g=f.dropDown;if((g.$items&&g.$items.length>0)&&!g.isOpened()&&!b.trigger(f.element,"open")){f.open()}};this.close=function(){var g=f.dropDown;if((g.$element.is(":animated")||g.isOpened())&&!b.trigger(f.element,"close")){f.close()}}},retrieveData:function(l){var j=[];var g=a(l).find("option");for(var h=0,k=g.length;h<k;h++){var f=g.eq(h);j[h]={Text:f.text(),Value:f.val(),Selected:f.is(":selected")}}return j},highlightFirstOnFilter:function(g,f){if(g.highlightFirst){f.first().addClass("t-state-selected");g.dropDown.scrollTo(f[0])}},moveToEnd:function(f){if(f.createTextRange){var g=f.createTextRange();g.moveStart("textedit",1);g.select()}},selection:function(g,i,f){if(g.createTextRange){var h=g.createTextRange();h.collapse(true);h.moveStart("character",i);h.moveEnd("character",f-i);h.select()}else{if(g.selectionStart){g.selectionStart=i;g.selectionEnd=f}}},updateTextAndValue:function(f,g,i){f.text(g);var h=i===null?g:i;f.$element.val(h)},getZIndex:function(f){var g="auto";a(f).parents().andSelf().each(function(){g=a(this).css("zIndex");if(Number(g)){g=Number(g)+1;return false}});return g},keycodes:[8,9,13,27,37,38,39,40,35,36]};function c(g,f){return function(i,j,m){if(!j||j.length==0){return}var k=a.map(j,function(o,n){var p=o.Text;if(f(m,p!==undefined?p:o)){return n}});var l=new RegExp("(?![^&;]+;)(?!<[^<>]*)("+m.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)",g?"ig":"i");i.filteredDataIndexes=k;i.selectedIndex=-1;i.dropDown.onItemCreate=function(n){if(m){n.html=n.html.replace(l,"<strong>$1</strong>")}};i.dropDown.dataBind(a.map(k,function(o,n){return j[o]}),i.encoded);var h=i.dropDown.$items;h.removeClass("t-state-selected");b.list.highlightFirstOnFilter(i,h)}}function d(g,f,k){if(!g||!f){return null}var l=k.length;k=k.toLowerCase();for(var h=0,j=g.length;h<j;h++){if(g[h].Text.slice(0,l).toLowerCase()==k){return f[h]}}}b.dropDownList=function(i,m){a.extend(this,m);var j=i.nodeName.toLowerCase()=="select";if(j&&!this.data){this.data=b.list.retrieveData(i);new b.list.htmlBuilder(i,"t-dropdown",j).render();i=i.previousSibling}var h="";this.element=i;var o=this;var f=this.$element=a(i).closest("form").bind("reset",function(){setTimeout(function(){o.value(i.value)})}).end();this.loader=new b.list.loader(this);this.trigger=new b.list.trigger(this);this.$wrapper=f.closest(".t-dropdown");var g=this.$text=this.$wrapper.find("> .t-dropdown-wrap > .t-input");if(!this.$wrapper.attr("tabIndex")){this.$wrapper.attr("tabIndex",0)}this.dropDown=new b.dropDown({attr:this.dropDownAttr,effects:this.effects,onClick:a.proxy(function(q){this.select(q.item);this.trigger.change();this.trigger.close();this.$wrapper.focus()},this)});this.dropDown.$element.css("direction",this.$wrapper.closest(".t-rtl").length?"rtl":"");var p=function(s){var q="class",r=f.attr(q);if((s.attrName&&s.attrName=="class")||(s.propertyName&&s.propertyName=="className")){var t=f.prev(".t-dropdown-wrap");var u=/\b(t-state-[\w]+)\b/.exec(t.attr(q));if(!(u&&u[0])){u=""}else{u=u[0]}if(r!=t.attr(q)){t.attr(q,r).addClass("t-dropdown-wrap "+u)}}};if(a.browser.msie){i.attachEvent("onpropertychange",p)}else{f.bind("DOMAttrModified",p)}f.closest("form").bind("reset",a.proxy(function(q){var r=this;window.setTimeout(function(){if(f.val()!=""){r.value(f.val())}else{r.text("");r.highlight(0);r.selectedIndex=0}},1)},this));this.fill=function(q){function t(v){var y,z=v.selectedValue||v.value();if(z){y=function(A){return z==(A.Value||A.Text)}}else{var u=v.dropDown.$items,w=v.index,x=u.filter(".t-state-selected").length;y=w!=-1&&w<u.length?w:x>0?x-1:0}v.select(y)}var r=this.dropDown,s=this.loader;if(!r.$items&&!s.ajaxError){if(s.isAjax()){s.ajaxRequest(function(u){this.dataBind(u,true);t(this);b.trigger(this.element,"dataBound");this.trigger.change();if(q){q()}})}else{this.dataBind(this.data);t(this);if(q){q()}}}};this.enable=function(){var q=this.$wrapper.removeClass("t-state-disabled");if(!q.data("events")){this.$wrapper.removeClass("t-state-disabled").bind({keydown:a.proxy(k,this),keypress:a.proxy(l,this),click:a.proxy(function(s){var t=this.trigger;var r=this.dropDown;this.$wrapper.focus();if(r.isOpened()){t.close()}else{if(!r.$items){this.fill(t.open)}else{t.open()}}},this)})}f.removeAttr("disabled")};this.disable=function(){f.attr("disabled","disabled");this.$wrapper.addClass("t-state-disabled").unbind()};this.reload=function(){this.dropDown.$items=null;this.fill()};this.select=function(r){var q=this.highlight(r);if(q!=-1){this.selectedIndex=q;b.list.updateTextAndValue(this,this.data[q].Text,this.data[q].Value)}return q};this.text=function(q){if(q!==undefined){if(this.encoded){q=b.encode(q)}this.$text.html(q&&q.replace(e,"")?q:"&nbsp;")}else{return this.$text.html()}};this.value=function(r){if(r!==undefined){var q=this.select(function(s){return r==s.Value});if(q==-1){q=this.select(function(s){return r==s.Text})}if(q!=-1){this.previousValue=this.$element.val()}}else{return this.$element.val()}};b.list.common.call(this);b.list.initialize.call(this);a(document.documentElement).bind("mousedown",a.proxy(function(r){var q=this.dropDown.$element;var s=q&&q.parent().length>0;if(a.contains(this.$wrapper[0],r.target)||(s&&a.contains(q.parent()[0],r.target))){return}this.trigger.change();this.trigger.close()},this));this[this.enabled?"enable":"disable"]();function n(){clearTimeout(this.timeout);this.timeout=setTimeout(a.proxy(function(){h=""},this),this.delay)}function k(v){var y=this.trigger;var u=this.dropDown;var x=v.keyCode||v.which;if(v.altKey&&(x==38||x==40)){var t=x==38?y.close:y.open;if(!u.$items){this.fill(t)}else{t()}return}if(x>34&&x<41){v.preventDefault();if(!u.$items){this.fill();return}var r=u.$items,s=a(r[this.selectedIndex]);var q=(x==35)?r.last():(x==36)?r.first():(x==37||x==38)?s.prev():(x==39||x==40)?s.next():[];if(q.length){var w=q[0];this.select(w);u.scrollTo(w);if(!u.isOpened()){y.change()}}}if(x==8){a.proxy(n,this)();v.preventDefault();h=h.slice(0,-1)}if(x==9||x==13||x==27){y.change();y.close()}}function l(r){var q=this.dropDown;var t=r.keyCode||r.charCode;if(t==0||a.inArray(t,b.list.keycodes)!=-1||r.ctrlKey||r.altKey||r.shiftKey){return}if(!q.$items){this.fill();return}var u=h;u+=String.fromCharCode(t);if(u){var s=d(this.data,q.$items,u);if(s){this.select(s);q.scrollTo(s)}h=u}a.proxy(n,this)()}};a.fn.tDropDownList=function(f){return b.create(this,{name:"tDropDownList",init:function(g,h){return new b.dropDownList(g,h)},options:f})};a.fn.tDropDownList.defaults={effects:b.fx.slide.defaults(),accessible:false,index:0,delay:500,enabled:true,encoded:true}})(jQuery);

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect CGI
Canada Canada
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions