From b5fe9dbe336b1b93cfcadf9350ba5343b9150224 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Fri, 3 Jun 2016 11:33:11 -0700 Subject: [PATCH] Adding a security section to the docs (#561) --- caravel/assets/images/create_role.png | Bin 0 -> 51474 bytes docs/index.rst | 1 + docs/security.rst | 70 ++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 caravel/assets/images/create_role.png create mode 100644 docs/security.rst diff --git a/caravel/assets/images/create_role.png b/caravel/assets/images/create_role.png new file mode 100644 index 0000000000000000000000000000000000000000..0914a5829bc30a1e9faf22710949b77035061c90 GIT binary patch literal 51474 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 U?r@xIx|^Tc#> zzp&ev;x&lh_Z>MP)XZYL1t1KQflab-3k>BhUm9P_##GB8waL)s3RwhBs17f5J>M&G zu~bbYuC=sw4%H@On_-WJRjE#iuLa39u*lm&9?vaE9>skesCmbi@(ZZ;U5&!Q zAfywgLr@fxXMIkkq%$DWE_hMbhr%iv$Msn1hG4hFP47G84cBfFy~t>fxuY&9Gb+G+ z$xPg4^`OB|)7JF{uE9nqJt4jm#kG#jsJAu^`d$S>7GjU9dJC3AG=l6irc@M zBO>)!{j7(rgDY)xu0tk%>^d&!oyC~(N(h!tkFPyT?hYlbeG)x1d*%IbglDGK?0N;H zw7(b}QbH6_x1Gja9WX+JqgFp5EQZEJ4c*q-nixrDsZ_IdV;3=m zekY`LJ3CI)loSr&=#*&Ze*1fcTl zxX-B=)$ze!e*S9onPbfJdkyEgvp^k{oN^+-cD~xM_wryp>?Nh~t`!}F)76L{@+hwC z3nk%@im^}J^`o&pmY14^F&P5zgo$V!aP9${&0} zOzB0IxtlT$f8bMOtqakyVc!*H8Y5$!3Yr}-BwC+-8CgKO(_%i*dYAM;N7*+)hVgT) zi)~u_Aw}xWlsV=ai^E+LtsdVW9En=5zSkKt+W-7R2=(JSuR_nzKJms0_`muOsGUY> z-MA%k2L6O7gbJ$%b!5nk26E_S1~5xtaO84DiMCaVOuFt{b}6+VZ3t z*EH3D!*2|-ix|9Tet|p$;+hep#0u~*GOKs?RmBS3>MaEWqUNsOW*;4S-ha=Iln;4} z3E&zbR0wyZ>icqbF2Fl^>5}McvPg8&KgnV8>p!$ZBp%bdg3V#n z3QUe`AthS%r^h!4eG^S`IWZ?i{EsZsQ+6aDIZ-sr|0Z%6t0>mc8drwbF8@zN!w@d9A+Q1o^%+vzzo0hWwAt%5$Dq+p^ce%NT|V#Y$c*Anc4)Kt z(W|>Ue1?KIdu~<(7P=pF4P0rb8^338O0uB?((pPlCH8suA@i9c-Q3;Npo`mciB$rf)T!qK~p(#;1XaX_VIc9anF%5!sp!sCSDYG-A+9VioXrNzq zm6aGGyl7j9#Y!8q^-)Kzz)=e+*Fuq_+YIG^YmSaup8FT2*)T)I;qW=!<4EZQ{yrrVaxg2U%?vy*M3H9J+E4!D|8G2_(-~X+cZdgI~1I1uUrbWTjGfT z-Z2IFgq!SJwR3=P^EcZX1Lj2H=_L8D+NZg@r}8UU+h6X$+c)&+4@_F z9{|t!&Y@LQL)6SlxRuv%6V4ReL~kFw%->UgR@>r3@Q_M8Kus8Y41M zA|M>&2uOo;zuMQMT>iEI?H1eYZyZwxYg^BJ#B6ae?y6cRZ8slW5iOhqxY#9RqJbz# znsC-7zlwM|2~CrW_@JRyn`8)>*waNIp}PlUZawJhv%{h)%geujxCin0YOaY3XwN6X zGi-;QZs6JS0*ag1KJecP>*)o_@v6eEd9z_>+aonVK4o`n4TgQFUF-(BXiln%zSq!U zIjO4^^$PMOYh2n-r#a2ux!Ndb#54{Tu?+oJWd5D6Sgl?&-n+XgG-KDaunQ(0cUMCM z?_70^5$jbSm9=Jsu}_?G(;*N4=x0#g{k6%KDgnURZ#d~L0Gvq`Jx8;)TbzJ7F3D2B zo2(W|c$>E`R;&of{&8R&f;c<^Cfp&+MowH8gXFk33`D@-(rpXu+DeS0s@zD-L_sQ zcV-#QBO!Y2MAi*FC5j51pPu8S9&EvjOqagn#YR;?<50oLc3+Ht7@}gw0VDiQ;&rQ3 z>zMp_Xe&@G+}9OKLdQ9XU6h)-)r-Fy6l=O2*W=0<;U_iu196*%`ERgZqOzILil90c zIJ)h@3B-_4cH*jieryuorGQ}MMvaL*;Cq}^^+5*1of9=Pq&wMtLpiLHz)EwfiueTu z{;-sQ`Y8Y$w{?sg3|^k@rw?I&6|HF$hmtkdt&hwIiVRi?u|$JQ0Is1A`1^VE&$Zki z2O)nzKb=I;S z6Gj{0eiJkIU`|}uxCR;{XK)pJx*sS4L?2nEXdRIwKJ319=Uxs_VkhTGg~~n)XpSdS zFdRB7JvV-!j$k}7VRa^?0>%&22J@nwj40f{n2Fi1OnztJ3(8KHaYQ7}n2-{p*~$w< zn-2aw)pIyDoe9A`Ov$+7vnO01as_#E9dDq%gGhh?kCxTBp14o48>L{8T^O<76n02w zP^<#0fPtzzC78CI1js^sgT9KpWy1$0pKWEuFGK9T0-_(o@_jgB^Tl~(%6(0*yBu!;H=wh5ijQ<4B`qIp$X${e6@95 z8SQ?l2EV*V&uF9c)mI{672amxwUHe{>5CN>+n%z6lLeaO;c z&`&G67ObB8`HcY4SwrXzavnukUaZh={YBhw`vfbe~jesgn4~i0@24sL}f{>H$|4@HxIA%LTb^wJnv=%No`kH zR5P0y|ByBLgn+%S`Wd+C)rtn=&@e!R5=1i<5d}T9^W{UT3xkB$?c6LN-Vyl(w$Gk| zsALulgBYs?$I^o|y|W|zx}mKkn0EFq5znpm2(ktgg?h*mqU{kJ$3=9_qvO%UE93iA z0G^q%`mnsOb)+?fqBkzI(mwgHbiU?94O7Wra_elsc4ccj`kWeZV^a4dG0w=>trIIf z6G+ZrJsKFd#ojwVN}uJR@yJ^U>mli2y=?AV7M7HLQVE75;BMP0qqe{S>oSt>ntYI0 zz4$=uJxKwSNBy%=dR_&Hj4VC6V~F_ zbzgsj02%M424ZQI>9o5ZFj2=R{y0NHQr}xzU!+F$wB^hV*Kp>)$Vds&6!Iy{?rEVS z)O3G{WlXO54DpeiYF+=7a;5BGrFrF}*|9A)%y{$0;Gls=bPM-vIJt>5U+`yDhOo$R z@2xon^pJJqOJqD4hK$;qd_QRGA762t9z3|uKC0|NIdG&XD5$8>o7&q;RO1>_%_^eg z(>QwdR-kmF{HFGPzuCR>+4PMkEv-~7*)$JK<8*E6rbV-!;l8jF^l(aP;9oNC483 z3KePshyLXn_2nYNkE9KTMamT{X1>G~B*_SsQt*fNKnaSSk$q9!v~^IaHY~JaxWGAy z=WY0fXW1J;;$LFB9!z*NzT0Xwj?#}#=Bf{A{N|fY6hXu8IOF&w3#Q-EGrj)vssc@d z0Hori$baPqp__8IJ+IsQlKH|#v+8Yly_w4izj6`2S4m&%RFv1jm=^_oji~i()ym_o@z4rD zHxBPRP(}cNc@;3qonB}iqZ*8Iw_9}Pm@mDXIAEWgq{~7^;FI}SSi2vq5=E1MeJ{sf;GLzz7(i1d<#B$z`fnM zk@M=!PrU``03LzPtZMG=2pnv~`o3tfsm&JGqkD+!*a=-XGL9^*TpkS+J_Q1*4!Vnv zuY?r_WLQJl5?Usyesb9XQMl5M4J%oYvThMfI%i##`M&cq!u6e6wo{|;m5=j;C0++~ zq>nqH)HY!dU%sUS#&*9SFLwv_?5>KMEM0s$l$Mcz_(YW@#f$JtoKUYhZ!~`1){j6^ zvQW>0b4SCm@e0$mB{rKxgL0yhXi|@iO{B9${w!eEH!WmhTX1FbC--aj=PsBQZUmj; z2u^uYYPGzedjgFm?FWom%n#2%jrIPm#v&~@3NkAVzOA-}Bw$)g42jc^3bzBy+q`F3 zFOQKQJ`qHvErOjUcPAQU6oz4n7CJzl+yhIdc0ZWbev+g#@TZCTP)}KK|KfR1p0BVq z+Ve1)XdzYQ>n_?>)jxdbwcnzr=kLH~Ag_B>1nN4m^gJ~Q*+tS< z3!8B6=?Gu_GXGG7dg1bDWOCsiTpWZsHv>UIS0g&sDp!+6Qc0Hf98`K?ndC9E2Ay;=lP6@#F69)kO)OlGy2$ z{zw?LG*njMkOX|zP#Xg#8{uA?ds1YA^%^;^_ySOPDWkS87^BDpU1^5BoYKY~Pm z`wDBwUq|dUe}z<>uV;_}LZPmEK{Yp+dCDE2)a}k%bN~&+G6}g*krDpYaV(+X*TeO9 zpz1Dar|0|UY)5@K;y;9xCOP%Fnk8D!;_#n;Em;ReNb42U%>IjLPKy@EwNRhH|6?@b z&y8f~1GppVbe$0YBAP3O6kzCWNk8IU!CCtY!h(JR;?WoP$@+ZF!@Kj?IM3E=>GnRDd^xW zIVAUper=4u3LmgV)&bem?sAmFzo{KD!D_GNxx(`I_xkxAz1#snxHQDJUinMX^XEHy zU4;Qf`HeLGIV28IO< zpF8f?Pyc)3{wyQEe)@lV;=Cq^Vu51O*-k$k0vNP(A$y^0JG^Qko;$@SCCYY1q~+=;3Oh3KnHcybbg(j#l1*wg1{6myC!wD@@M z@d9Gi1$DMHtivas*HmQ&GxP`fno^B+P<;&KrJaf4b^X=mXuk$hui=pnP>q+yfCWNw z;R-wWte`1VFt~FOK=XH@$lICogzD$%+xbyq(00|14i!W@P~;bg5zYiq2j`~4?}^m$ z3}D@%d>8?~i5q<(aKdFlVNODx^uEPEwAIgJE;JB&#Qd&voxm}7mF%{GW4?^qX$vN~ zMD_Kx>OJY;cZ_@~vnZDorXTkmTljJ(2YCq$%_x<&ozwHmBU=R2zw;uE_>-+?y zYCkn!f&I&C0dTzXFae7>=zU< zKy}kUzTQ_zF3#@^hlGfKUnHUXvKH*L>w1Rrzq|cEe^3fiLUJs3l70tL{W)ph-N0F% zsA~=Xx0&E?!CU_C!u`5tKhF67^}^|^Rp4#{Dq>}iZrB4XA9yI|;){`(j|KjI8B?+# zi<)Xof5V>(^!um8>%C<>$kc^Pfof9b<^s-Ygu1C@X`NE-qut1t&Hrr*Y_K)@OuP%(5@cZ&c zj!M0<>7xjp?Qqij+-*5ebWI=0Kd;FpY_WOs>07~nosEt6l9T>${AU{)uH9Mm?)!u{ zUAp#k!LHzfXi#~Q}ohtsNP zcSQ+qZVKAXcb>GZZxY^WGglNhm!b7$l*&4I{D|8ZW4V&r27AUq*UI4oe>jx$e%XYZ z`bY~a{p+|@&p)q#Bol1s!2y~e$}KcXH29pvrj{>#qV>zFBHTGI>|6IvWblY*F}7#Q z0xef-aeTsjYPlJ;(3H6U@EyM|+mr;V8=<&tAbx5qpy3k^Qt`RKSeJPT`ZGHjbS`(0 ze*u}2`m&YNw{X4gp()vj(bp^@mzBiBA@g|A#zzBf-d0JwJyoL(C<^C4YLh2kwO5i! zEzy)Z3+WVTuLaiE_ek5J(Ob{hfD)HQiUO7SxTst820=8`M;=eeM&juE4{K86p zAETt#5ZV#FYjAInywt@;rX<9xoFPHiL3S@#Vl0a6uuQD9Qq$fuj0=mL62PX^qZaCQ zwoQma#7Qc}xBU7Wgth&7D-`sqds7n2zEycc*gFEK*|21+%jA-j^N&EFSkexNQ=3l) z5AL@)M_;A!LDI{o5!`r2t%^Vl_}fnK`^_BhrC2pG`727+<0`Br?CyLGNO{ncy&!Wy z)PP+QP{r*UY@^f>+(RI-Ibs%-@i*V=&*K3&bCuQCJBh{Ivn)pMNC}Wv1f{AGFK8X< z4`%nD;avED4(Gl9qu&_WueAj_i;S+pbn-Cby5nIjuj~jJ$ENLPmfYcvyw8^g*-Y#Hai-!q zz@1Boa_fYbVsQ51RpxHIrFk+FZX7wXWR{EB?L%XEe?KO0?N2#+xA~G;btc?#uQ0-s z5->d;76(}(*~me{M<59r=Ow;zN^xSum-XbVgU-KXX@9<$$@A06QZT+6S?ZA|QbwQa1QaKIz`qs;8Tv|rYJA{pS=F9-i{R2yq{u&) zvR*IH6=3VW0b0HcFu+C-n#i#TEavwhJK>M62a;{JhEqM-%!abwg+X#$AH?34gNZXJ z$JV(}KF>Wcx`*TAw^tW+L-e|Vwr2-QYGH^Fy@`)SWz&qmsnUV~;-6>baSDV?_dDIh zfGepFOhrn9#w(vp0QWl+WY0Ooc^;$dY?@X8WGwDbFdm_U{V13N%9@lu5r#j!F`Qf7 zU?UbTwl};3L?Ux`(9~zs#214(6(4-o^e7Q2B1dWeaU+0}?slX1Az!lGk`~CzpIwZU z#<>H<|2PA8;u}cO>-rrs3c0P>B`frZZY#E^Le$P8C{z`JFY(Z#fU{!E_OJ{ZKTt zE^DPA+~*yx$3fHL=;WDw+WL4eEJ^(QuxDW^=!}5i0ne)c=CJ%fHw1v*#=)_*8z4=< zBDm%bM=Qn>ZwIyQy87^ebtZgg4!Df)rHZukhM}JOS=C~u=yKqQg2!QpULWg+T$QhW zvv@~^?9YH2gxxZNsV0W}&YZ#&B!1up<8y{Bn`sy{7(5}%XurthVK=@6;x-kRcNP>9 zo*^Ah#*;~e6U~1F!LI+gMrbi^d_~4YCl(*WcfO}b%#X;MgE79I4Y`0aH3e(peOzER z@mxKTa+JBSTNL5O4tYrzA(4ouTdW@>9?Sp{WUQyV1s+rzv)*oqWGYLx@>8TCgG)1( zxt5}&QP~U0zFsCnnzD@|dl6D(-{p7Sx+#Od-p}Wm_cimp=Q+Dt`zfwDeu4Ls3V=Aty*rDf{G=^9y!L} zm$wNjR}BtoW{)+^ch|rUs5r;Yq0QBI;YFZEmz?rL?^6Pq~Pm=4pw@N-nd)*YtjIu{;t9DGie{` zfZE?wPPgb0?NiWZoe={vO=_a4!s;U;tPB9M#W-jo4SyY9REYy_gl4AJ=JZ9+YSy?T zW14r!O{vj!-)yyUxwG?2g`G7Xq)a(IhbOnqcUiYVe+8WT5};toq~eYu-iP{hmlM?g zW}Gj=a?|6v;SHRuBm~R08PO;~^oDd2b*Dj^C?=T~duYV&r8lr~gGMdic8uQ2tLV)J z_F^JJcAVnIM7RB!LHKW+$J^cv00D@nuM;CHXs+4=AE9I}l&{IN0briSgL z;QmyVOrsbs%8{1!vc+}JTk(hp^>X8C1h)L2Ql>LQh^K7@DgX!6j^WcSMBNc2MkT zljb7yp&c8QWJ{wG{C7Egs;F$90@v#X7^(yiDM?7*v+0YmX_ILCcS`%xtidKbz%PeS z4ceK2@VsMz{$&rnAC7+UY${q?9MgFn;9&7Uipk54)#^roN;!9riCTG4gC78{BObt9 zdrE*oBm3GNC+?ew=uaTTuB&F^6H%s#0HiiM+;~g!bLtx&jrrkmXcGUZh3?cDy0M%A zh&c5vJ`bel3F|P?gLKvE@S;)Qfe&-jz!_nhx8Pt{l(C_Wr#*+u*9p*bfdN~>dLM1g z|E>|BUw6nVPz%yNGzz+c8eZ_WDT99?$8m^S$W4%WNoQr{)B7kLy_r5*Nfy^=y{2=4 zJu5NU`b64^oexesEnabyLd9=nmmbiRXAe>BKr8+#B=lbZaS$x)a-l$_oXIz*s{%DD z20S??KdTLPrto~db_nGf0BaRNKDHn=u*0Y`#dvGvY>j(q#Co!jt$3z3xy7IjO-?xf zVc%m?l_y|KN9TfC-z!&riRwx)W}$87l+mrZJRlU9KluaIyR==`$sl%Z!8v4DwKpG( zOU@D&(?ooKVY~bKJ^5!+|FXK_Y2*TpN5=S7LH5f*Df4ddFtN$( z!O1lF^`D^Qb@KFHY|WgETZ*72FbS?76ZBmK3W90<^AP4~m#(t_z<*kliB&>x@1$*6 zJxIVHg!Hzz!Dd*5rOrq^u18a?;Px9sQ!uB>%G%&zT~b3^=5Vi6tv`(@9f z(HA?%9;Y3dCC(_7j)WZPxRbH9={-~@=>*|@h0)kt7*}#DF7MDryR#|R=s*lGctj0f z2%G%q{=Py19@oK?L0Ue@{-on=so=2AK5?GC!)zqn>(wTk&m!dW8C8Vh++N?Q6Fbv5 zeEw^#D5v3rN`@To>+n1v<@FMAZT=n;3cisbgO+$NFWadT*-ez2RX|z`+3La((Y)LV z+KR(QNG1aeye2uf?ArRz$BD|PSns7CKR@5qX@YX=HP6}~`VYU(X&oKzFTr2lywZ(I z*V#ZSr)b4uz?^@;lgAOA1z9W0??uw(E+yLx{O>EFG6r)f1|KWg1z9EiWFC8!VwKqc zdQQ{MuDg<%xCgt~otdaq5WzfyUPw9|C{)sZc<5$X;>pVTp<2J6Mdt6@cE1x6IBwu> znYv%8?%jJg>zanQe1L}|CE1qw6f7=lP2p7Qb@p_$;IN$onS~&rVd3Y@L&1qj&lX&$ zwXM!#IP`=i|Mmi#*2tksCvYQCBh4lUkMt`Lp71VuWMA+_1 z`}yo=zs@iGKzCu(DP_anlB&Ifk2W73}s#aM%V%>3z zBUec}hm&nmu30RPN&pt!KQl~}+v1(Ci{>u|DmYR6lmiFqHqx0wObvX64f<8I{KNgR z!i224&guxMBqT-Kk|wNqX?ptcZ(1QNxq-{W9Kn80g3&>FlE^xAxd4Gx1G*hmOHd)Y zji?O%&7|9?Ee*p;6|vz$H=lXQ3k}3v@-d+Q@FL?9H$=;=nN9Z_4y3LzoS4oBO7C*- zShA;1>7B_-U5Vj1ecp1`@~ZKV3FV!SKT)O z73*B4JsZvxj>K0D4 zTtLI$cwSh&Wb#l-pP77i`6dT%)I2VikH9@={YSG5Rm5TVS{-h@XgZ}t=j0Rf$1Q*Mx ztD6Hvbo}kcqe`nh9?_>s%yY3IgUp3LCkIABi#>Nl^&M-L3$7qG>t4WOpafMI|Lg!; zV)G_jVjR(-!M@4*$)!lL)MUt|nU#n688&hY0el33?$9Sbd=hMYeo0|-+Ws#7$JGL^ z7gsv|p4;7#(j+l!uFf-iO04#I^;HDVu#~SNSDrd?8B{4>Hfktp!+T}2zj(F>h$won z9bllG-iJA5##UXlq3DLC{XQa-m#0{me}Qxz zjSZq1+or~+LwAN#gwN65f2-TG z?V|RT2BHG|XI8Fl|0#mFHsFTD4Ygips=Un}38EnS)VGOWJ(!w=fnKHfX7E=ua3jB(szo&+y*X1%2420cGc%Q-h>oPCmJZ z*e=0VNe@!fO#8B;=y#KF%hK$@1m73lOB;h65Ys1?v39@Z%|>l^y7-|`r`Qe7ohyE+ zCc%?K(x0T$AzIs=d9ORivornnjG)|yWLhUTMXP#6evK5dag*q?soA?vf6A^(kC|z- z_nBPfO&Z1(mO12+AC;0bnAgy^oxScK*z6BGmNKV;h)u+8f*`>>vTfDJO2Ak^Gk&Ed zLOE+U1Rgok1uHWW7(0vvmzguaudq4rKju)ayv-jEUgJ5aqO`=;y~(4%Dk( zKj=|kZHya%WmWXXtekS-2BIMm!B%^%HYNf|%7q)RlvWWh<7$+I#40F!Zk4aXrLYac z8on48q^i&S++;-FY18(ppF(***PWd%j7cbVA}vptpKBOYw#cq^o?a+(yp+KLe@C(U K+UZ(neE$!@vp(Pe literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index 44061c6070..044548c17a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -32,6 +32,7 @@ Contents installation tutorial + security videos gallery druid diff --git a/docs/security.rst b/docs/security.rst new file mode 100644 index 0000000000..0dfc73626f --- /dev/null +++ b/docs/security.rst @@ -0,0 +1,70 @@ +Security +======== +Security in Caravel is handled by Flask AppBuilder (FAB). FAB is a +"Simple and rapid application development framework, built on top of Flask.". +FAB provides authentication, user management, permissions and roles. + + +Provided Roles +-------------- +Caravel ships with 3 roles that are handled by Caravel itself. You can +assume that these 3 roles will stay up-to-date as Caravel evolves. + +Admin +""""" +Admins have all rights, including granting or revoking rights from other +users and altering other people's slices and dashboards. + +Alpha +""""" +Alpha have access to all data sources, but they cannot grant or revoke access +from other users. They are also limited to altering the objects that they +own. Alpha users can add and alter data sources. + +Gamma +""""" +Gamma have limited access. They can only consume data coming from data sources +they have been giving access to through another complementary role. +They only have access to view the slices and +dashboards made from data sources that they have access to. Currently Gamma +users are not able to alter or add data sources. We assume that they are +mostly content consumers, though they can create slices and dashboards. + +Also note that when Gamma users look at the dashboards and slices list view, +they will only see the objects that they have access to. + + +Managing Gamma per data source access +------------------------------------- +Here's how to provide users access to only specific datasets. First make +sure the users with limited access have [only] the Gamma role assigned to +them. Second, create a new role (``Menu -> Security -> List Roles``) and +click the ``+`` sign. + +.. image:: _static/img/create_role.png + :scale: 50 % + +This new window allows you to give this new role a name, attribute it to users +and select the tables in the ``Permissions`` dropdown. To select the data +sources you want to associate with this role, simply click in the dropdown +and use the typeahead to search for your table names. + +You can then confirm with your Gamma users that they see the objects +(dashboards and slices) associated with the tables related to their roles. + + +Customizing +----------- + +The permissions exposed by FAB are very granular and allow for a great level +of customization. FAB creates many permissions automagically for each model +that is create (can_add, can_delete, can_show, can_edit, ...) as well as for +each view. On top of that, Caravel can expose more granular permissions like +``all_datasource_access``. + +We do not recommend altering the 3 base roles as there +are a set of assumptions that Caravel build upon. It is possible though for +you to create your own roles, and union them to existing ones. + +The best way to go is probably to give user ``Gamma`` plus another role +that would add specific permissions needed by this type of users.